Enter the directory of the maca folder on your drive and the name of the tissue you want to analyze.

tissue_of_interest = "Bladder"

Load the requisite packages and some additional helper functions.

library(here)
library(useful)
library(Seurat)
library(dplyr)
library(Matrix)
save_dir = here('00_data_ingest', 'tissue_robj')
# read the metadata to get the plates we want
plate_metadata_filename = here('00_data_ingest', 'facs_raw_data', 'metadata_FACS.csv')
plate_metadata <- read.csv(plate_metadata_filename, sep=",", header = TRUE)
colnames(plate_metadata)[1] <- "plate.barcode"
plate_metadata

Load the plate data. “Bladder” is one of the tissues studied

tissue_plates = filter(plate_metadata, tissue == tissue_of_interest)[,c('plate.barcode','tissue','subtissue','mouse.sex')]
tissue_plates

Load the read count data.

#Load the gene names and set the metadata columns by opening the first file
filename = here('00_data_ingest', 'facs_raw_data', 'FACS', paste0(tissue_of_interest, '-counts.csv'))
raw.data = read.csv(filename, sep=",", row.names=1)

Make a vector of plate barcodes for each cell

plate.barcodes = lapply(colnames(raw.data), function(x) strsplit(strsplit(x, "_")[[1]][1], '.', fixed=TRUE)[[1]][2])
head(plate.barcodes)
[[1]]
[1] "D041914"

[[2]]
[1] "D041914"

[[3]]
[1] "D041914"

[[4]]
[1] "D041914"

[[5]]
[1] "D041914"

[[6]]
[1] "D041914"

Use only the metadata rows corresponding to Bladder plates. Make a plate barcode dataframe to “expand” the per-plate metadata to be per-cell.

rownames(barcode.df) = colnames(raw.data)
colnames(barcode.df) = c('plate.barcode')
head(barcode.df)
                      plate.barcode
A12.D041914.3_8_M.1.1 "D041914"    
B16.D041914.3_8_M.1.1 "D041914"    
C18.D041914.3_8_M.1.1 "D041914"    
D22.D041914.3_8_M.1.1 "D041914"    
F4.D041914.3_8_M.1.1  "D041914"    
C19.D041914.3_8_M.1.1 "D041914"    
rnames = row.names(barcode.df)
meta.data <- merge(barcode.df, plate_metadata, by='plate.barcode', sort = F)
row.names(meta.data) <- rnames
head(meta.data)

Process the raw data and load it into the Seurat object.

# Find ERCC's, compute the percent ERCC, and drop them from the raw data.
erccs <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = TRUE)
percent.ercc <- Matrix::colSums(raw.data[erccs, ])/Matrix::colSums(raw.data)
ercc.index <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = FALSE)
raw.data <- raw.data[-ercc.index,]
# Create the Seurat object with all the data
tiss <- CreateSeuratObject(raw.data = raw.data, project = tissue_of_interest, 
                    min.cells = 5, min.genes = 5)
tiss <- AddMetaData(object = tiss, meta.data)
tiss <- AddMetaData(object = tiss, percent.ercc, col.name = "percent.ercc")
# Change default name for sums of counts from nUMI to nReads
colnames(tiss@meta.data)[colnames(tiss@meta.data) == 'nUMI'] <- 'nReads'
# Create metadata columns for annotations and subannotations
tiss@meta.data[,'annotation'] <- NA
tiss@meta.data[,'subannotation'] <- NA

Calculate percent ribosomal genes.

ribo.genes <- grep(pattern = "^Rp[sl][[:digit:]]", x = rownames(x = tiss@data), value = TRUE)
percent.ribo <- Matrix::colSums(tiss@raw.data[ribo.genes, ])/Matrix::colSums(tiss@raw.data)
tiss <- AddMetaData(object = tiss, metadata = percent.ribo, col.name = "percent.ribo")

A sanity check: genes per cell vs reads per cell.

GenePlot(object = tiss, gene1 = "nReads", gene2 = "nGene", use.raw=T)

Filter out cells with few reads and few genes.

tiss <- FilterCells(object = tiss, subset.names = c("nGene", "nReads"), 
    low.thresholds = c(500, 50000), high.thresholds = c(25000, 2000000))

Normalize the data, then regress out correlation with total reads

tiss <- NormalizeData(object = tiss)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
tiss <- ScaleData(object = tiss, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo"
[3] "Regressing out Rn45s"       

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |                                                                                |   1%
  |                                                                                      
  |=                                                                               |   1%
  |                                                                                      
  |=                                                                               |   2%
  |                                                                                      
  |==                                                                              |   2%
  |                                                                                      
  |==                                                                              |   3%
  |                                                                                      
  |===                                                                             |   4%
  |                                                                                      
  |====                                                                            |   5%
  |                                                                                      
  |====                                                                            |   6%
  |                                                                                      
  |=====                                                                           |   6%
  |                                                                                      
  |=====                                                                           |   7%
  |                                                                                      
  |======                                                                          |   7%
  |                                                                                      
  |======                                                                          |   8%
  |                                                                                      
  |=======                                                                         |   9%
  |                                                                                      
  |========                                                                        |  10%
  |                                                                                      
  |=========                                                                       |  11%
  |                                                                                      
  |=========                                                                       |  12%
  |                                                                                      
  |==========                                                                      |  12%
  |                                                                                      
  |==========                                                                      |  13%
  |                                                                                      
  |===========                                                                     |  14%
  |                                                                                      
  |============                                                                    |  15%
  |                                                                                      
  |=============                                                                   |  16%
  |                                                                                      
  |=============                                                                   |  17%
  |                                                                                      
  |==============                                                                  |  17%
  |                                                                                      
  |==============                                                                  |  18%
  |                                                                                      
  |===============                                                                 |  19%
  |                                                                                      
  |================                                                                |  20%
  |                                                                                      
  |=================                                                               |  21%
  |                                                                                      
  |=================                                                               |  22%
  |                                                                                      
  |==================                                                              |  22%
  |                                                                                      
  |==================                                                              |  23%
  |                                                                                      
  |===================                                                             |  23%
  |                                                                                      
  |===================                                                             |  24%
  |                                                                                      
  |====================                                                            |  25%
  |                                                                                      
  |=====================                                                           |  26%
  |                                                                                      
  |=====================                                                           |  27%
  |                                                                                      
  |======================                                                          |  27%
  |                                                                                      
  |======================                                                          |  28%
  |                                                                                      
  |=======================                                                         |  28%
  |                                                                                      
  |=======================                                                         |  29%
  |                                                                                      
  |========================                                                        |  30%
  |                                                                                      
  |=========================                                                       |  31%
  |                                                                                      
  |==========================                                                      |  32%
  |                                                                                      
  |==========================                                                      |  33%
  |                                                                                      
  |===========================                                                     |  33%
  |                                                                                      
  |===========================                                                     |  34%
  |                                                                                      
  |============================                                                    |  35%
  |                                                                                      
  |=============================                                                   |  36%
  |                                                                                      
  |==============================                                                  |  37%
  |                                                                                      
  |==============================                                                  |  38%
  |                                                                                      
  |===============================                                                 |  38%
  |                                                                                      
  |===============================                                                 |  39%
  |                                                                                      
  |================================                                                |  40%
  |                                                                                      
  |=================================                                               |  41%
  |                                                                                      
  |==================================                                              |  42%
  |                                                                                      
  |==================================                                              |  43%
  |                                                                                      
  |===================================                                             |  43%
  |                                                                                      
  |===================================                                             |  44%
  |                                                                                      
  |====================================                                            |  44%
  |                                                                                      
  |====================================                                            |  45%
  |                                                                                      
  |=====================================                                           |  46%
  |                                                                                      
  |======================================                                          |  47%
  |                                                                                      
  |======================================                                          |  48%
  |                                                                                      
  |=======================================                                         |  48%
  |                                                                                      
  |=======================================                                         |  49%
  |                                                                                      
  |========================================                                        |  49%
  |                                                                                      
  |========================================                                        |  50%
  |                                                                                      
  |========================================                                        |  51%
  |                                                                                      
  |=========================================                                       |  51%
  |                                                                                      
  |=========================================                                       |  52%
  |                                                                                      
  |==========================================                                      |  52%
  |                                                                                      
  |==========================================                                      |  53%
  |                                                                                      
  |===========================================                                     |  54%
  |                                                                                      
  |============================================                                    |  55%
  |                                                                                      
  |============================================                                    |  56%
  |                                                                                      
  |=============================================                                   |  56%
  |                                                                                      
  |=============================================                                   |  57%
  |                                                                                      
  |==============================================                                  |  57%
  |                                                                                      
  |==============================================                                  |  58%
  |                                                                                      
  |===============================================                                 |  59%
  |                                                                                      
  |================================================                                |  60%
  |                                                                                      
  |=================================================                               |  61%
  |                                                                                      
  |=================================================                               |  62%
  |                                                                                      
  |==================================================                              |  62%
  |                                                                                      
  |==================================================                              |  63%
  |                                                                                      
  |===================================================                             |  64%
  |                                                                                      
  |====================================================                            |  65%
  |                                                                                      
  |=====================================================                           |  66%
  |                                                                                      
  |=====================================================                           |  67%
  |                                                                                      
  |======================================================                          |  67%
  |                                                                                      
  |======================================================                          |  68%
  |                                                                                      
  |=======================================================                         |  69%
  |                                                                                      
  |========================================================                        |  70%
  |                                                                                      
  |=========================================================                       |  71%
  |                                                                                      
  |=========================================================                       |  72%
  |                                                                                      
  |==========================================================                      |  72%
  |                                                                                      
  |==========================================================                      |  73%
  |                                                                                      
  |===========================================================                     |  73%
  |                                                                                      
  |===========================================================                     |  74%
  |                                                                                      
  |============================================================                    |  75%
  |                                                                                      
  |=============================================================                   |  76%
  |                                                                                      
  |=============================================================                   |  77%
  |                                                                                      
  |==============================================================                  |  77%
  |                                                                                      
  |==============================================================                  |  78%
  |                                                                                      
  |===============================================================                 |  78%
  |                                                                                      
  |===============================================================                 |  79%
  |                                                                                      
  |================================================================                |  80%
  |                                                                                      
  |=================================================================               |  81%
  |                                                                                      
  |==================================================================              |  82%
  |                                                                                      
  |==================================================================              |  83%
  |                                                                                      
  |===================================================================             |  83%
  |                                                                                      
  |===================================================================             |  84%
  |                                                                                      
  |====================================================================            |  85%
  |                                                                                      
  |=====================================================================           |  86%
  |                                                                                      
  |======================================================================          |  87%
  |                                                                                      
  |======================================================================          |  88%
  |                                                                                      
  |=======================================================================         |  88%
  |                                                                                      
  |=======================================================================         |  89%
  |                                                                                      
  |========================================================================        |  90%
  |                                                                                      
  |=========================================================================       |  91%
  |                                                                                      
  |==========================================================================      |  92%
  |                                                                                      
  |==========================================================================      |  93%
  |                                                                                      
  |===========================================================================     |  93%
  |                                                                                      
  |===========================================================================     |  94%
  |                                                                                      
  |============================================================================    |  94%
  |                                                                                      
  |============================================================================    |  95%
  |                                                                                      
  |=============================================================================   |  96%
  |                                                                                      
  |==============================================================================  |  97%
  |                                                                                      
  |==============================================================================  |  98%
  |                                                                                      
  |=============================================================================== |  98%
  |                                                                                      
  |=============================================================================== |  99%
  |                                                                                      
  |================================================================================|  99%
  |                                                                                      
  |================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |================================================================================| 100%
tiss <- FindVariableGenes(object = tiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|

Run Principal Component Analysis.

tiss <- RunPCA(object = tiss, do.print = FALSE)
tiss <- ProjectPCA(object = tiss, do.print = FALSE)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = tiss)

Choose the number of principal components to use.

# Set number of principal components. 
n.pcs = 10

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.

# Set resolution 
res.used <- 1
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

VlnPlot(tiss, genes_to_check)

BuildClusterTree(tiss)
[1] "Finished averaging RNA for cluster 0"
[1] "Finished averaging RNA for cluster 1"
[1] "Finished averaging RNA for cluster 2"
[1] "Finished averaging RNA for cluster 3"
[1] "Finished averaging RNA for cluster 4"
[1] "Finished averaging RNA for cluster 5"
[1] "Finished averaging RNA for cluster 6"
[1] "Finished averaging RNA for cluster 7"
An object of class seurat in project Bladder 
 16192 genes across 1287 samples.

# Get markers for a particular cluster
cluster0_markers = filter(tiss.markers, cluster == 0)$gene
DotPlot(tiss, genes.plot = cluster0_markers[1:20], plot.legend = T)

How big are the clusters?

table(tiss@ident)

  0   1   2   3   4   5   6   7 
245 191 170 165 165 156  99  96 

Which markers identify a specific cluster?

clust.markers <- FindMarkers(object = tiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~59s          
   |++                                                | 2 % ~53s          
   |++                                                | 3 % ~51s          
   |+++                                               | 4 % ~50s          
   |+++                                               | 5 % ~48s          
   |++++                                              | 6 % ~48s          
   |++++                                              | 7 % ~47s          
   |+++++                                             | 8 % ~46s          
   |+++++                                             | 9 % ~45s          
   |++++++                                            | 10% ~44s          
   |++++++                                            | 11% ~43s          
   |+++++++                                           | 12% ~42s          
   |+++++++                                           | 13% ~42s          
   |++++++++                                          | 14% ~41s          
   |++++++++                                          | 15% ~40s          
   |+++++++++                                         | 16% ~40s          
   |+++++++++                                         | 18% ~39s          
   |++++++++++                                        | 19% ~39s          
   |++++++++++                                        | 20% ~38s          
   |+++++++++++                                       | 21% ~38s          
   |+++++++++++                                       | 22% ~37s          
   |++++++++++++                                      | 23% ~37s          
   |++++++++++++                                      | 24% ~36s          
   |+++++++++++++                                     | 25% ~35s          
   |+++++++++++++                                     | 26% ~35s          
   |++++++++++++++                                    | 27% ~34s          
   |++++++++++++++                                    | 28% ~34s          
   |+++++++++++++++                                   | 29% ~33s          
   |+++++++++++++++                                   | 30% ~32s          
   |++++++++++++++++                                  | 31% ~32s          
   |++++++++++++++++                                  | 32% ~31s          
   |+++++++++++++++++                                 | 33% ~31s          
   |++++++++++++++++++                                | 34% ~30s          
   |++++++++++++++++++                                | 35% ~30s          
   |+++++++++++++++++++                               | 36% ~29s          
   |+++++++++++++++++++                               | 37% ~29s          
   |++++++++++++++++++++                              | 38% ~28s          
   |++++++++++++++++++++                              | 39% ~28s          
   |+++++++++++++++++++++                             | 40% ~27s          
   |+++++++++++++++++++++                             | 41% ~27s          
   |++++++++++++++++++++++                            | 42% ~26s          
   |++++++++++++++++++++++                            | 43% ~26s          
   |+++++++++++++++++++++++                           | 44% ~25s          
   |+++++++++++++++++++++++                           | 45% ~25s          
   |++++++++++++++++++++++++                          | 46% ~24s          
   |++++++++++++++++++++++++                          | 47% ~24s          
   |+++++++++++++++++++++++++                         | 48% ~23s          
   |+++++++++++++++++++++++++                         | 49% ~23s          
   |++++++++++++++++++++++++++                        | 51% ~22s          
   |++++++++++++++++++++++++++                        | 52% ~22s          
   |+++++++++++++++++++++++++++                       | 53% ~21s          
   |+++++++++++++++++++++++++++                       | 54% ~21s          
   |++++++++++++++++++++++++++++                      | 55% ~20s          
   |++++++++++++++++++++++++++++                      | 56% ~20s          
   |+++++++++++++++++++++++++++++                     | 57% ~19s          
   |+++++++++++++++++++++++++++++                     | 58% ~19s          
   |++++++++++++++++++++++++++++++                    | 59% ~18s          
   |++++++++++++++++++++++++++++++                    | 60% ~18s          
   |+++++++++++++++++++++++++++++++                   | 61% ~17s          
   |+++++++++++++++++++++++++++++++                   | 62% ~17s          
   |++++++++++++++++++++++++++++++++                  | 63% ~16s          
   |++++++++++++++++++++++++++++++++                  | 64% ~16s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~16s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~15s          
   |++++++++++++++++++++++++++++++++++                | 67% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~14s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 44s
print(x = head(x= clust.markers, n = 10))

You can also compute all markers for all clusters at once. This may take some time.

#tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~39s          
   |++                                                | 2 % ~38s          
   |++                                                | 3 % ~37s          
   |+++                                               | 4 % ~37s          
   |+++                                               | 5 % ~37s          
   |++++                                              | 6 % ~36s          
   |++++                                              | 7 % ~35s          
   |+++++                                             | 8 % ~35s          
   |+++++                                             | 9 % ~35s          
   |++++++                                            | 10% ~35s          
   |++++++                                            | 11% ~34s          
   |+++++++                                           | 12% ~34s          
   |+++++++                                           | 13% ~34s          
   |++++++++                                          | 14% ~33s          
   |++++++++                                          | 15% ~33s          
   |+++++++++                                         | 16% ~33s          
   |+++++++++                                         | 17% ~33s          
   |++++++++++                                        | 18% ~32s          
   |++++++++++                                        | 19% ~32s          
   |+++++++++++                                       | 20% ~31s          
   |+++++++++++                                       | 21% ~31s          
   |++++++++++++                                      | 22% ~30s          
   |++++++++++++                                      | 23% ~30s          
   |+++++++++++++                                     | 24% ~29s          
   |+++++++++++++                                     | 25% ~29s          
   |++++++++++++++                                    | 26% ~28s          
   |++++++++++++++                                    | 27% ~28s          
   |+++++++++++++++                                   | 28% ~27s          
   |+++++++++++++++                                   | 29% ~27s          
   |++++++++++++++++                                  | 30% ~27s          
   |++++++++++++++++                                  | 31% ~26s          
   |+++++++++++++++++                                 | 32% ~26s          
   |+++++++++++++++++                                 | 33% ~26s          
   |++++++++++++++++++                                | 34% ~25s          
   |++++++++++++++++++                                | 35% ~25s          
   |+++++++++++++++++++                               | 36% ~25s          
   |+++++++++++++++++++                               | 37% ~24s          
   |++++++++++++++++++++                              | 38% ~24s          
   |++++++++++++++++++++                              | 39% ~23s          
   |+++++++++++++++++++++                             | 40% ~23s          
   |+++++++++++++++++++++                             | 41% ~22s          
   |++++++++++++++++++++++                            | 42% ~22s          
   |++++++++++++++++++++++                            | 43% ~22s          
   |+++++++++++++++++++++++                           | 44% ~21s          
   |+++++++++++++++++++++++                           | 45% ~21s          
   |++++++++++++++++++++++++                          | 46% ~20s          
   |++++++++++++++++++++++++                          | 47% ~20s          
   |+++++++++++++++++++++++++                         | 48% ~20s          
   |+++++++++++++++++++++++++                         | 49% ~19s          
   |++++++++++++++++++++++++++                        | 51% ~19s          
   |++++++++++++++++++++++++++                        | 52% ~18s          
   |+++++++++++++++++++++++++++                       | 53% ~18s          
   |+++++++++++++++++++++++++++                       | 54% ~18s          
   |++++++++++++++++++++++++++++                      | 55% ~17s          
   |++++++++++++++++++++++++++++                      | 56% ~17s          
   |+++++++++++++++++++++++++++++                     | 57% ~16s          
   |+++++++++++++++++++++++++++++                     | 58% ~16s          
   |++++++++++++++++++++++++++++++                    | 59% ~16s          
   |++++++++++++++++++++++++++++++                    | 60% ~15s          
   |+++++++++++++++++++++++++++++++                   | 61% ~15s          
   |+++++++++++++++++++++++++++++++                   | 62% ~14s          
   |++++++++++++++++++++++++++++++++                  | 63% ~14s          
   |++++++++++++++++++++++++++++++++                  | 64% ~14s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~13s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~13s          
   |++++++++++++++++++++++++++++++++++                | 67% ~13s          
   |++++++++++++++++++++++++++++++++++                | 68% ~12s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~12s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~11s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~11s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~11s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~10s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~09s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~09s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 38s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~45s          
   |++                                                | 2 % ~46s          
   |++                                                | 3 % ~46s          
   |+++                                               | 4 % ~45s          
   |+++                                               | 5 % ~44s          
   |++++                                              | 6 % ~42s          
   |++++                                              | 7 % ~41s          
   |+++++                                             | 8 % ~41s          
   |+++++                                             | 9 % ~40s          
   |++++++                                            | 10% ~39s          
   |++++++                                            | 11% ~39s          
   |+++++++                                           | 12% ~38s          
   |+++++++                                           | 13% ~37s          
   |++++++++                                          | 14% ~37s          
   |++++++++                                          | 15% ~36s          
   |+++++++++                                         | 16% ~36s          
   |+++++++++                                         | 17% ~36s          
   |++++++++++                                        | 18% ~35s          
   |++++++++++                                        | 19% ~35s          
   |+++++++++++                                       | 20% ~34s          
   |+++++++++++                                       | 21% ~34s          
   |++++++++++++                                      | 22% ~33s          
   |++++++++++++                                      | 23% ~33s          
   |+++++++++++++                                     | 24% ~32s          
   |+++++++++++++                                     | 25% ~32s          
   |++++++++++++++                                    | 26% ~31s          
   |++++++++++++++                                    | 27% ~31s          
   |+++++++++++++++                                   | 28% ~30s          
   |+++++++++++++++                                   | 29% ~30s          
   |++++++++++++++++                                  | 30% ~30s          
   |++++++++++++++++                                  | 31% ~29s          
   |+++++++++++++++++                                 | 32% ~29s          
   |+++++++++++++++++                                 | 33% ~28s          
   |++++++++++++++++++                                | 34% ~28s          
   |++++++++++++++++++                                | 35% ~27s          
   |+++++++++++++++++++                               | 36% ~27s          
   |+++++++++++++++++++                               | 37% ~26s          
   |++++++++++++++++++++                              | 38% ~26s          
   |++++++++++++++++++++                              | 39% ~26s          
   |+++++++++++++++++++++                             | 40% ~25s          
   |+++++++++++++++++++++                             | 41% ~25s          
   |++++++++++++++++++++++                            | 42% ~24s          
   |++++++++++++++++++++++                            | 43% ~24s          
   |+++++++++++++++++++++++                           | 44% ~23s          
   |+++++++++++++++++++++++                           | 45% ~23s          
   |++++++++++++++++++++++++                          | 46% ~23s          
   |++++++++++++++++++++++++                          | 47% ~22s          
   |+++++++++++++++++++++++++                         | 48% ~22s          
   |+++++++++++++++++++++++++                         | 49% ~21s          
   |++++++++++++++++++++++++++                        | 51% ~21s          
   |++++++++++++++++++++++++++                        | 52% ~20s          
   |+++++++++++++++++++++++++++                       | 53% ~20s          
   |+++++++++++++++++++++++++++                       | 54% ~20s          
   |++++++++++++++++++++++++++++                      | 55% ~19s          
   |++++++++++++++++++++++++++++                      | 56% ~19s          
   |+++++++++++++++++++++++++++++                     | 57% ~18s          
   |+++++++++++++++++++++++++++++                     | 58% ~18s          
   |++++++++++++++++++++++++++++++                    | 59% ~17s          
   |++++++++++++++++++++++++++++++                    | 60% ~17s          
   |+++++++++++++++++++++++++++++++                   | 61% ~17s          
   |+++++++++++++++++++++++++++++++                   | 62% ~16s          
   |++++++++++++++++++++++++++++++++                  | 63% ~16s          
   |++++++++++++++++++++++++++++++++                  | 64% ~15s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~15s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~14s          
   |++++++++++++++++++++++++++++++++++                | 67% ~14s          
   |++++++++++++++++++++++++++++++++++                | 68% ~14s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 42s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~32s          
   |++                                                | 2 % ~32s          
   |++                                                | 3 % ~32s          
   |+++                                               | 4 % ~31s          
   |+++                                               | 5 % ~31s          
   |++++                                              | 6 % ~31s          
   |++++                                              | 7 % ~30s          
   |+++++                                             | 9 % ~30s          
   |+++++                                             | 10% ~30s          
   |++++++                                            | 11% ~30s          
   |++++++                                            | 12% ~30s          
   |+++++++                                           | 13% ~30s          
   |+++++++                                           | 14% ~29s          
   |++++++++                                          | 15% ~29s          
   |++++++++                                          | 16% ~29s          
   |+++++++++                                         | 17% ~28s          
   |++++++++++                                        | 18% ~28s          
   |++++++++++                                        | 19% ~28s          
   |+++++++++++                                       | 20% ~27s          
   |+++++++++++                                       | 21% ~27s          
   |++++++++++++                                      | 22% ~27s          
   |++++++++++++                                      | 23% ~26s          
   |+++++++++++++                                     | 24% ~26s          
   |+++++++++++++                                     | 26% ~26s          
   |++++++++++++++                                    | 27% ~25s          
   |++++++++++++++                                    | 28% ~25s          
   |+++++++++++++++                                   | 29% ~25s          
   |+++++++++++++++                                   | 30% ~24s          
   |++++++++++++++++                                  | 31% ~24s          
   |++++++++++++++++                                  | 32% ~24s          
   |+++++++++++++++++                                 | 33% ~23s          
   |++++++++++++++++++                                | 34% ~23s          
   |++++++++++++++++++                                | 35% ~23s          
   |+++++++++++++++++++                               | 36% ~22s          
   |+++++++++++++++++++                               | 37% ~22s          
   |++++++++++++++++++++                              | 38% ~21s          
   |++++++++++++++++++++                              | 39% ~21s          
   |+++++++++++++++++++++                             | 40% ~21s          
   |+++++++++++++++++++++                             | 41% ~20s          
   |++++++++++++++++++++++                            | 43% ~20s          
   |++++++++++++++++++++++                            | 44% ~20s          
   |+++++++++++++++++++++++                           | 45% ~19s          
   |+++++++++++++++++++++++                           | 46% ~19s          
   |++++++++++++++++++++++++                          | 47% ~18s          
   |++++++++++++++++++++++++                          | 48% ~18s          
   |+++++++++++++++++++++++++                         | 49% ~18s          
   |+++++++++++++++++++++++++                         | 50% ~17s          
   |++++++++++++++++++++++++++                        | 51% ~17s          
   |+++++++++++++++++++++++++++                       | 52% ~17s          
   |+++++++++++++++++++++++++++                       | 53% ~16s          
   |++++++++++++++++++++++++++++                      | 54% ~16s          
   |++++++++++++++++++++++++++++                      | 55% ~15s          
   |+++++++++++++++++++++++++++++                     | 56% ~15s          
   |+++++++++++++++++++++++++++++                     | 57% ~15s          
   |++++++++++++++++++++++++++++++                    | 59% ~14s          
   |++++++++++++++++++++++++++++++                    | 60% ~14s          
   |+++++++++++++++++++++++++++++++                   | 61% ~14s          
   |+++++++++++++++++++++++++++++++                   | 62% ~13s          
   |++++++++++++++++++++++++++++++++                  | 63% ~13s          
   |++++++++++++++++++++++++++++++++                  | 64% ~12s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~12s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~12s          
   |++++++++++++++++++++++++++++++++++                | 67% ~11s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~11s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~11s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~10s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~10s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~09s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~09s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~08s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~08s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~07s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 34s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 16s      
   |++                                                | 2 % ~01m 02s      
   |++                                                | 3 % ~58s          
   |+++                                               | 4 % ~60s          
   |+++                                               | 5 % ~57s          
   |++++                                              | 6 % ~54s          
   |++++                                              | 7 % ~51s          
   |+++++                                             | 8 % ~49s          
   |+++++                                             | 9 % ~47s          
   |++++++                                            | 11% ~45s          
   |++++++                                            | 12% ~44s          
   |+++++++                                           | 13% ~42s          
   |+++++++                                           | 14% ~41s          
   |++++++++                                          | 15% ~40s          
   |++++++++                                          | 16% ~41s          
   |+++++++++                                         | 17% ~40s          
   |+++++++++                                         | 18% ~40s          
   |++++++++++                                        | 19% ~39s          
   |++++++++++                                        | 20% ~38s          
   |+++++++++++                                       | 21% ~38s          
   |++++++++++++                                      | 22% ~39s          
   |++++++++++++                                      | 23% ~39s          
   |+++++++++++++                                     | 24% ~39s          
   |+++++++++++++                                     | 25% ~40s          
   |++++++++++++++                                    | 26% ~39s          
   |++++++++++++++                                    | 27% ~38s          
   |+++++++++++++++                                   | 28% ~37s          
   |+++++++++++++++                                   | 29% ~37s          
   |++++++++++++++++                                  | 31% ~36s          
   |++++++++++++++++                                  | 32% ~35s          
   |+++++++++++++++++                                 | 33% ~34s          
   |+++++++++++++++++                                 | 34% ~33s          
   |++++++++++++++++++                                | 35% ~32s          
   |++++++++++++++++++                                | 36% ~32s          
   |+++++++++++++++++++                               | 37% ~31s          
   |+++++++++++++++++++                               | 38% ~30s          
   |++++++++++++++++++++                              | 39% ~30s          
   |++++++++++++++++++++                              | 40% ~29s          
   |+++++++++++++++++++++                             | 41% ~28s          
   |++++++++++++++++++++++                            | 42% ~28s          
   |++++++++++++++++++++++                            | 43% ~27s          
   |+++++++++++++++++++++++                           | 44% ~26s          
   |+++++++++++++++++++++++                           | 45% ~26s          
   |++++++++++++++++++++++++                          | 46% ~25s          
   |++++++++++++++++++++++++                          | 47% ~24s          
   |+++++++++++++++++++++++++                         | 48% ~24s          
   |+++++++++++++++++++++++++                         | 49% ~24s          
   |++++++++++++++++++++++++++                        | 51% ~23s          
   |++++++++++++++++++++++++++                        | 52% ~23s          
   |+++++++++++++++++++++++++++                       | 53% ~22s          
   |+++++++++++++++++++++++++++                       | 54% ~21s          
   |++++++++++++++++++++++++++++                      | 55% ~21s          
   |++++++++++++++++++++++++++++                      | 56% ~20s          
   |+++++++++++++++++++++++++++++                     | 57% ~20s          
   |+++++++++++++++++++++++++++++                     | 58% ~19s          
   |++++++++++++++++++++++++++++++                    | 59% ~19s          
   |++++++++++++++++++++++++++++++                    | 60% ~18s          
   |+++++++++++++++++++++++++++++++                   | 61% ~18s          
   |++++++++++++++++++++++++++++++++                  | 62% ~17s          
   |++++++++++++++++++++++++++++++++                  | 63% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~16s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~16s          
   |++++++++++++++++++++++++++++++++++                | 66% ~15s          
   |++++++++++++++++++++++++++++++++++                | 67% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~14s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~09s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 42s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~54s          
   |++                                                | 2 % ~49s          
   |++                                                | 3 % ~49s          
   |+++                                               | 4 % ~48s          
   |+++                                               | 5 % ~47s          
   |++++                                              | 6 % ~47s          
   |++++                                              | 7 % ~46s          
   |+++++                                             | 8 % ~45s          
   |+++++                                             | 9 % ~44s          
   |++++++                                            | 10% ~43s          
   |++++++                                            | 11% ~44s          
   |+++++++                                           | 12% ~44s          
   |+++++++                                           | 13% ~44s          
   |++++++++                                          | 14% ~43s          
   |++++++++                                          | 15% ~43s          
   |+++++++++                                         | 16% ~42s          
   |+++++++++                                         | 17% ~41s          
   |++++++++++                                        | 18% ~41s          
   |++++++++++                                        | 19% ~40s          
   |+++++++++++                                       | 20% ~39s          
   |+++++++++++                                       | 21% ~39s          
   |++++++++++++                                      | 22% ~38s          
   |++++++++++++                                      | 23% ~37s          
   |+++++++++++++                                     | 24% ~37s          
   |+++++++++++++                                     | 26% ~36s          
   |++++++++++++++                                    | 27% ~36s          
   |++++++++++++++                                    | 28% ~35s          
   |+++++++++++++++                                   | 29% ~34s          
   |+++++++++++++++                                   | 30% ~34s          
   |++++++++++++++++                                  | 31% ~33s          
   |++++++++++++++++                                  | 32% ~33s          
   |+++++++++++++++++                                 | 33% ~32s          
   |+++++++++++++++++                                 | 34% ~32s          
   |++++++++++++++++++                                | 35% ~31s          
   |++++++++++++++++++                                | 36% ~31s          
   |+++++++++++++++++++                               | 37% ~30s          
   |+++++++++++++++++++                               | 38% ~30s          
   |++++++++++++++++++++                              | 39% ~29s          
   |++++++++++++++++++++                              | 40% ~29s          
   |+++++++++++++++++++++                             | 41% ~28s          
   |+++++++++++++++++++++                             | 42% ~28s          
   |++++++++++++++++++++++                            | 43% ~27s          
   |++++++++++++++++++++++                            | 44% ~27s          
   |+++++++++++++++++++++++                           | 45% ~26s          
   |+++++++++++++++++++++++                           | 46% ~26s          
   |++++++++++++++++++++++++                          | 47% ~25s          
   |++++++++++++++++++++++++                          | 48% ~25s          
   |+++++++++++++++++++++++++                         | 49% ~24s          
   |+++++++++++++++++++++++++                         | 50% ~24s          
   |++++++++++++++++++++++++++                        | 51% ~23s          
   |+++++++++++++++++++++++++++                       | 52% ~23s          
   |+++++++++++++++++++++++++++                       | 53% ~22s          
   |++++++++++++++++++++++++++++                      | 54% ~22s          
   |++++++++++++++++++++++++++++                      | 55% ~21s          
   |+++++++++++++++++++++++++++++                     | 56% ~21s          
   |+++++++++++++++++++++++++++++                     | 57% ~20s          
   |++++++++++++++++++++++++++++++                    | 58% ~20s          
   |++++++++++++++++++++++++++++++                    | 59% ~19s          
   |+++++++++++++++++++++++++++++++                   | 60% ~19s          
   |+++++++++++++++++++++++++++++++                   | 61% ~18s          
   |++++++++++++++++++++++++++++++++                  | 62% ~18s          
   |++++++++++++++++++++++++++++++++                  | 63% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~16s          
   |++++++++++++++++++++++++++++++++++                | 66% ~16s          
   |++++++++++++++++++++++++++++++++++                | 67% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 46s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~37s          
   |++                                                | 2 % ~37s          
   |++                                                | 3 % ~37s          
   |+++                                               | 4 % ~39s          
   |+++                                               | 5 % ~38s          
   |++++                                              | 6 % ~38s          
   |++++                                              | 7 % ~37s          
   |+++++                                             | 8 % ~36s          
   |+++++                                             | 9 % ~36s          
   |++++++                                            | 11% ~35s          
   |++++++                                            | 12% ~35s          
   |+++++++                                           | 13% ~35s          
   |+++++++                                           | 14% ~34s          
   |++++++++                                          | 15% ~34s          
   |++++++++                                          | 16% ~33s          
   |+++++++++                                         | 17% ~33s          
   |+++++++++                                         | 18% ~33s          
   |++++++++++                                        | 19% ~32s          
   |++++++++++                                        | 20% ~32s          
   |+++++++++++                                       | 21% ~31s          
   |++++++++++++                                      | 22% ~31s          
   |++++++++++++                                      | 23% ~30s          
   |+++++++++++++                                     | 24% ~30s          
   |+++++++++++++                                     | 25% ~30s          
   |++++++++++++++                                    | 26% ~29s          
   |++++++++++++++                                    | 27% ~29s          
   |+++++++++++++++                                   | 28% ~28s          
   |+++++++++++++++                                   | 29% ~28s          
   |++++++++++++++++                                  | 31% ~27s          
   |++++++++++++++++                                  | 32% ~27s          
   |+++++++++++++++++                                 | 33% ~27s          
   |+++++++++++++++++                                 | 34% ~26s          
   |++++++++++++++++++                                | 35% ~26s          
   |++++++++++++++++++                                | 36% ~25s          
   |+++++++++++++++++++                               | 37% ~25s          
   |+++++++++++++++++++                               | 38% ~31s          
   |++++++++++++++++++++                              | 39% ~30s          
   |++++++++++++++++++++                              | 40% ~30s          
   |+++++++++++++++++++++                             | 41% ~29s          
   |++++++++++++++++++++++                            | 42% ~28s          
   |++++++++++++++++++++++                            | 43% ~28s          
   |+++++++++++++++++++++++                           | 44% ~27s          
   |+++++++++++++++++++++++                           | 45% ~27s          
   |++++++++++++++++++++++++                          | 46% ~26s          
   |++++++++++++++++++++++++                          | 47% ~25s          
   |+++++++++++++++++++++++++                         | 48% ~25s          
   |+++++++++++++++++++++++++                         | 49% ~24s          
   |++++++++++++++++++++++++++                        | 51% ~24s          
   |++++++++++++++++++++++++++                        | 52% ~23s          
   |+++++++++++++++++++++++++++                       | 53% ~22s          
   |+++++++++++++++++++++++++++                       | 54% ~22s          
   |++++++++++++++++++++++++++++                      | 55% ~21s          
   |++++++++++++++++++++++++++++                      | 56% ~21s          
   |+++++++++++++++++++++++++++++                     | 57% ~20s          
   |+++++++++++++++++++++++++++++                     | 58% ~20s          
   |++++++++++++++++++++++++++++++                    | 59% ~19s          
   |++++++++++++++++++++++++++++++                    | 60% ~19s          
   |+++++++++++++++++++++++++++++++                   | 61% ~18s          
   |++++++++++++++++++++++++++++++++                  | 62% ~18s          
   |++++++++++++++++++++++++++++++++                  | 63% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~16s          
   |++++++++++++++++++++++++++++++++++                | 66% ~16s          
   |++++++++++++++++++++++++++++++++++                | 67% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~11s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~10s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 44s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~40s          
   |+                                                 | 2 % ~41s          
   |++                                                | 3 % ~40s          
   |++                                                | 4 % ~40s          
   |+++                                               | 5 % ~40s          
   |+++                                               | 6 % ~40s          
   |++++                                              | 7 % ~39s          
   |++++                                              | 8 % ~39s          
   |+++++                                             | 9 % ~39s          
   |+++++                                             | 10% ~38s          
   |++++++                                            | 11% ~38s          
   |++++++                                            | 12% ~38s          
   |+++++++                                           | 13% ~37s          
   |+++++++                                           | 14% ~37s          
   |++++++++                                          | 15% ~36s          
   |++++++++                                          | 16% ~36s          
   |+++++++++                                         | 17% ~35s          
   |+++++++++                                         | 18% ~35s          
   |++++++++++                                        | 19% ~35s          
   |++++++++++                                        | 20% ~34s          
   |+++++++++++                                       | 21% ~34s          
   |+++++++++++                                       | 22% ~33s          
   |++++++++++++                                      | 23% ~33s          
   |++++++++++++                                      | 24% ~32s          
   |+++++++++++++                                     | 25% ~32s          
   |+++++++++++++                                     | 26% ~32s          
   |++++++++++++++                                    | 27% ~31s          
   |++++++++++++++                                    | 28% ~31s          
   |+++++++++++++++                                   | 29% ~30s          
   |+++++++++++++++                                   | 30% ~30s          
   |++++++++++++++++                                  | 31% ~29s          
   |++++++++++++++++                                  | 32% ~29s          
   |+++++++++++++++++                                 | 33% ~28s          
   |+++++++++++++++++                                | 34% ~28s          
   |++++++++++++++++++                                | 35% ~28s          
   |++++++++++++++++++                                | 36% ~27s          
   |+++++++++++++++++++                               | 37% ~27s          
   |+++++++++++++++++++                               | 38% ~26s          
   |++++++++++++++++++++                              | 39% ~26s          
   |++++++++++++++++++++                              | 40% ~26s          
   |+++++++++++++++++++++                             | 41% ~25s          
   |+++++++++++++++++++++                             | 42% ~25s          
   |++++++++++++++++++++++                            | 43% ~24s          
   |++++++++++++++++++++++                            | 44% ~24s          
   |+++++++++++++++++++++++                           | 45% ~23s          
   |+++++++++++++++++++++++                           | 46% ~23s          
   |++++++++++++++++++++++++                          | 47% ~23s          
   |++++++++++++++++++++++++                          | 48% ~22s          
   |+++++++++++++++++++++++++                         | 49% ~22s          
   |+++++++++++++++++++++++++                         | 50% ~21s          
   |++++++++++++++++++++++++++                        | 51% ~21s          
   |++++++++++++++++++++++++++                        | 52% ~20s          
   |+++++++++++++++++++++++++++                       | 53% ~20s          
   |+++++++++++++++++++++++++++                       | 54% ~20s          
   |++++++++++++++++++++++++++++                      | 55% ~19s          
   |++++++++++++++++++++++++++++                     | 56% ~19s          
   |+++++++++++++++++++++++++++++                     | 57% ~18s          
   |+++++++++++++++++++++++++++++                     | 58% ~18s          
   |++++++++++++++++++++++++++++++                    | 59% ~18s          
   |++++++++++++++++++++++++++++++                    | 60% ~17s          
   |+++++++++++++++++++++++++++++++                   | 61% ~17s          
   |+++++++++++++++++++++++++++++++                   | 62% ~16s          
   |++++++++++++++++++++++++++++++++                  | 63% ~16s          
   |++++++++++++++++++++++++++++++++                  | 64% ~16s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~15s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~15s          
   |++++++++++++++++++++++++++++++++++                | 67% ~14s          
   |++++++++++++++++++++++++++++++++++               | 68% ~14s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~10s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~09s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 43s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~39s          
   |++                                                | 2 % ~37s          
   |++                                                | 3 % ~37s          
   |+++                                               | 4 % ~35s          
   |+++                                               | 5 % ~35s          
   |++++                                              | 6 % ~34s          
   |++++                                              | 7 % ~34s          
   |+++++                                             | 8 % ~33s          
   |+++++                                             | 9 % ~32s          
   |++++++                                            | 10% ~32s          
   |++++++                                            | 11% ~31s          
   |+++++++                                           | 12% ~31s          
   |+++++++                                           | 13% ~30s          
   |++++++++                                          | 14% ~30s          
   |++++++++                                          | 15% ~29s          
   |+++++++++                                         | 16% ~29s          
   |+++++++++                                         | 17% ~29s          
   |++++++++++                                        | 18% ~28s          
   |++++++++++                                        | 19% ~28s          
   |+++++++++++                                       | 20% ~28s          
   |+++++++++++                                       | 21% ~27s          
   |++++++++++++                                      | 22% ~27s          
   |++++++++++++                                      | 23% ~26s          
   |+++++++++++++                                     | 24% ~26s          
   |+++++++++++++                                     | 26% ~26s          
   |++++++++++++++                                    | 27% ~25s          
   |++++++++++++++                                    | 28% ~25s          
   |+++++++++++++++                                   | 29% ~25s          
   |+++++++++++++++                                   | 30% ~24s          
   |++++++++++++++++                                  | 31% ~24s          
   |++++++++++++++++                                  | 32% ~24s          
   |+++++++++++++++++                                 | 33% ~23s          
   |+++++++++++++++++                                 | 34% ~23s          
   |++++++++++++++++++                                | 35% ~22s          
   |++++++++++++++++++                                | 36% ~22s          
   |+++++++++++++++++++                               | 37% ~22s          
   |+++++++++++++++++++                               | 38% ~21s          
   |++++++++++++++++++++                              | 39% ~21s          
   |++++++++++++++++++++                              | 40% ~21s          
   |+++++++++++++++++++++                             | 41% ~20s          
   |+++++++++++++++++++++                             | 42% ~20s          
   |++++++++++++++++++++++                            | 43% ~20s          
   |++++++++++++++++++++++                            | 44% ~19s          
   |+++++++++++++++++++++++                           | 45% ~19s          
   |+++++++++++++++++++++++                           | 46% ~19s          
   |++++++++++++++++++++++++                          | 47% ~18s          
   |++++++++++++++++++++++++                          | 48% ~18s          
   |+++++++++++++++++++++++++                         | 49% ~17s          
   |+++++++++++++++++++++++++                         | 50% ~17s          
   |++++++++++++++++++++++++++                        | 51% ~17s          
   |+++++++++++++++++++++++++++                       | 52% ~16s          
   |+++++++++++++++++++++++++++                       | 53% ~16s          
   |++++++++++++++++++++++++++++                      | 54% ~16s          
   |++++++++++++++++++++++++++++                      | 55% ~15s          
   |+++++++++++++++++++++++++++++                     | 56% ~15s          
   |+++++++++++++++++++++++++++++                     | 57% ~15s          
   |++++++++++++++++++++++++++++++                    | 58% ~14s          
   |++++++++++++++++++++++++++++++                    | 59% ~14s          
   |+++++++++++++++++++++++++++++++                   | 60% ~13s          
   |+++++++++++++++++++++++++++++++                   | 61% ~13s          
   |++++++++++++++++++++++++++++++++                  | 62% ~13s          
   |++++++++++++++++++++++++++++++++                  | 63% ~12s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~12s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~12s          
   |++++++++++++++++++++++++++++++++++                | 66% ~11s          
   |++++++++++++++++++++++++++++++++++                | 67% ~11s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~11s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~10s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~10s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~10s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~09s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~09s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~09s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~08s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~08s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~08s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~07s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 34s

Display the top markers you computed above.

#tiss.markers %>% group_by(cluster) %>% top_n(5, avg_diff)
tiss.markers %>% group_by(cluster) %>% top_n(10, avg_diff)

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

0: alpha 1: beta 2: beta 3: exocrine 4: duct 5: delta 6: gamma 7: endothelial 8: immune 9: stellate

# stash current cluster IDs
tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
# enumerate current cluster IDs and the labels for them
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7)
annotation <- c("bladder cell", "bladder cell", "mesenchymal cell", "mesenchymal cell", "mesenchymal cell", "mesenchymal cell", "basal cell of urothelium", "bladder cell")
cell_ontology_id = c("CL:1001319", "CL:1001319", "CL:0008019", "CL:0008019", "CL:0008019", "CL:0008019", "CL:1000486", "CL:1001319")
tiss@meta.data[,'annotation'] <- plyr::mapvalues(x = tiss@meta.data$cluster.ids, from = cluster.ids, to = annotation)
tiss@meta.data[,'cell_ontology_id'] <- plyr::mapvalues(x = tiss@meta.data$cluster.ids, from = cluster.ids, to = cell_ontology_id)
TSNEPlot(object = tiss, do.label = TRUE, pt.size = 0.5, group.by='annotation')

TSNEPlot(object = tiss, do.return = TRUE, group.by = "mouse.sex")

Save the Seurat object

save(tiss, file=paste0(save_dir,"/",tissue_of_interest, "_seurat_tiss.Robj"))
write.csv(tiss@meta.data[,c('annotation','subannotation')],file =paste0(save_dir,"/", tissue_of_interest,"_metadata.csv"))

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = tiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(tiss@ident), as.character(tiss@meta.data$plate.barcode))
   
    B000610 B002764 B002771 D041914 D042253 MAA000487
  0      87       2      49      65      17        25
  1       2       0       1       1      84       103
  2      58       1      10      97       2         2
  3      41       0      19     100       3         2
  4       1       0       3       1     114        46
  5       2       0       3       2      98        51
  6       0       0       1       0      24        74
  7       6       8      11      50       1        20

Save the R object so 1. you can reload without recomputing and 2. anyone else can reproduce your figures.

save(tiss, file=paste0(save_dir,"/",tissue_of_interest, "_seurat_tiss.Robj"))
# To reload a saved object
# load(file=paste0(rootdir,"/",tissue_of_interest, "_seurat_tiss.Robj")
# Get markers for a particular cluster
for (i in 0:7) {clustermarkers = filter(tiss.markers, cluster == i)$gene
DotPlot(tiss, genes.plot = clustermarkers[1:20], plot.legend = T)}

# Get subtissue, eg, the endocrine clusters
subtiss <- SubsetData(object = tiss, ident.use = c(2),
  do.center = F, do.scale = F)
subtiss <- SubsetData(object = tiss, ident.use = c(2), do.center = F, do.scale = F, cells.use = )
subtiss <- NormalizeData(object = subtiss)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
subtiss <- ScaleData(object = subtiss, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo"
[3] "Regressing out Rn45s"       

  |                                                                                      
  |                                                                                |   0%
  |                                                                                      
  |                                                                                |   1%
  |                                                                                      
  |=                                                                               |   1%
  |                                                                                      
  |=                                                                               |   2%
  |                                                                                      
  |==                                                                              |   2%
  |                                                                                      
  |==                                                                              |   3%
  |                                                                                      
  |===                                                                             |   4%
  |                                                                                      
  |====                                                                            |   5%
  |                                                                                      
  |====                                                                            |   6%
  |                                                                                      
  |=====                                                                           |   6%
  |                                                                                      
  |=====                                                                           |   7%
  |                                                                                      
  |======                                                                          |   7%
  |                                                                                      
  |======                                                                          |   8%
  |                                                                                      
  |=======                                                                         |   9%
  |                                                                                      
  |========                                                                        |  10%
  |                                                                                      
  |=========                                                                       |  11%
  |                                                                                      
  |=========                                                                       |  12%
  |                                                                                      
  |==========                                                                      |  12%
  |                                                                                      
  |==========                                                                      |  13%
  |                                                                                      
  |===========                                                                     |  14%
  |                                                                                      
  |============                                                                    |  15%
  |                                                                                      
  |=============                                                                   |  16%
  |                                                                                      
  |=============                                                                   |  17%
  |                                                                                      
  |==============                                                                  |  17%
  |                                                                                      
  |==============                                                                  |  18%
  |                                                                                      
  |===============                                                                 |  19%
  |                                                                                      
  |================                                                                |  20%
  |                                                                                      
  |=================                                                               |  21%
  |                                                                                      
  |=================                                                               |  22%
  |                                                                                      
  |==================                                                              |  22%
  |                                                                                      
  |==================                                                              |  23%
  |                                                                                      
  |===================                                                             |  23%
  |                                                                                      
  |===================                                                             |  24%
  |                                                                                      
  |====================                                                            |  25%
  |                                                                                      
  |=====================                                                           |  26%
  |                                                                                      
  |=====================                                                           |  27%
  |                                                                                      
  |======================                                                          |  27%
  |                                                                                      
  |======================                                                          |  28%
  |                                                                                      
  |=======================                                                         |  28%
  |                                                                                      
  |=======================                                                         |  29%
  |                                                                                      
  |========================                                                        |  30%
  |                                                                                      
  |=========================                                                       |  31%
  |                                                                                      
  |==========================                                                      |  32%
  |                                                                                      
  |==========================                                                      |  33%
  |                                                                                      
  |===========================                                                     |  33%
  |                                                                                      
  |===========================                                                     |  34%
  |                                                                                      
  |============================                                                    |  35%
  |                                                                                      
  |=============================                                                   |  36%
  |                                                                                      
  |==============================                                                  |  37%
  |                                                                                      
  |==============================                                                  |  38%
  |                                                                                      
  |===============================                                                 |  38%
  |                                                                                      
  |===============================                                                 |  39%
  |                                                                                      
  |================================                                                |  40%
  |                                                                                      
  |=================================                                               |  41%
  |                                                                                      
  |==================================                                              |  42%
  |                                                                                      
  |==================================                                              |  43%
  |                                                                                      
  |===================================                                             |  43%
  |                                                                                      
  |===================================                                             |  44%
  |                                                                                      
  |====================================                                            |  44%
  |                                                                                      
  |====================================                                            |  45%
  |                                                                                      
  |=====================================                                           |  46%
  |                                                                                      
  |======================================                                          |  47%
  |                                                                                      
  |======================================                                          |  48%
  |                                                                                      
  |=======================================                                         |  48%
  |                                                                                      
  |=======================================                                         |  49%
  |                                                                                      
  |========================================                                        |  49%
  |                                                                                      
  |========================================                                        |  50%
  |                                                                                      
  |========================================                                        |  51%
  |                                                                                      
  |=========================================                                       |  51%
  |                                                                                      
  |=========================================                                       |  52%
  |                                                                                      
  |==========================================                                      |  52%
  |                                                                                      
  |==========================================                                      |  53%
  |                                                                                      
  |===========================================                                     |  54%
  |                                                                                      
  |============================================                                    |  55%
  |                                                                                      
  |============================================                                    |  56%
  |                                                                                      
  |=============================================                                   |  56%
  |                                                                                      
  |=============================================                                   |  57%
  |                                                                                      
  |==============================================                                  |  57%
  |                                                                                      
  |==============================================                                  |  58%
  |                                                                                      
  |===============================================                                 |  59%
  |                                                                                      
  |================================================                                |  60%
  |                                                                                      
  |=================================================                               |  61%
  |                                                                                      
  |=================================================                               |  62%
  |                                                                                      
  |==================================================                              |  62%
  |                                                                                      
  |==================================================                              |  63%
  |                                                                                      
  |===================================================                             |  64%
  |                                                                                      
  |====================================================                            |  65%
  |                                                                                      
  |=====================================================                           |  66%
  |                                                                                      
  |=====================================================                           |  67%
  |                                                                                      
  |======================================================                          |  67%
  |                                                                                      
  |======================================================                          |  68%
  |                                                                                      
  |=======================================================                         |  69%
  |                                                                                      
  |========================================================                        |  70%
  |                                                                                      
  |=========================================================                       |  71%
  |                                                                                      
  |=========================================================                       |  72%
  |                                                                                      
  |==========================================================                      |  72%
  |                                                                                      
  |==========================================================                      |  73%
  |                                                                                      
  |===========================================================                     |  73%
  |                                                                                      
  |===========================================================                     |  74%
  |                                                                                      
  |============================================================                    |  75%
  |                                                                                      
  |=============================================================                   |  76%
  |                                                                                      
  |=============================================================                   |  77%
  |                                                                                      
  |==============================================================                  |  77%
  |                                                                                      
  |==============================================================                  |  78%
  |                                                                                      
  |===============================================================                 |  78%
  |                                                                                      
  |===============================================================                 |  79%
  |                                                                                      
  |================================================================                |  80%
  |                                                                                      
  |=================================================================               |  81%
  |                                                                                      
  |==================================================================              |  82%
  |                                                                                      
  |==================================================================              |  83%
  |                                                                                      
  |===================================================================             |  83%
  |                                                                                      
  |===================================================================             |  84%
  |                                                                                      
  |====================================================================            |  85%
  |                                                                                      
  |=====================================================================           |  86%
  |                                                                                      
  |======================================================================          |  87%
  |                                                                                      
  |======================================================================          |  88%
  |                                                                                      
  |=======================================================================         |  88%
  |                                                                                      
  |=======================================================================         |  89%
  |                                                                                      
  |========================================================================        |  90%
  |                                                                                      
  |=========================================================================       |  91%
  |                                                                                      
  |==========================================================================      |  92%
  |                                                                                      
  |==========================================================================      |  93%
  |                                                                                      
  |===========================================================================     |  93%
  |                                                                                      
  |===========================================================================     |  94%
  |                                                                                      
  |============================================================================    |  94%
  |                                                                                      
  |============================================================================    |  95%
  |                                                                                      
  |=============================================================================   |  96%
  |                                                                                      
  |==============================================================================  |  97%
  |                                                                                      
  |==============================================================================  |  98%
  |                                                                                      
  |=============================================================================== |  98%
  |                                                                                      
  |=============================================================================== |  99%
  |                                                                                      
  |================================================================================|  99%
  |                                                                                      
  |================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                                
  |                                                                                          |   0%
  |                                                                                                
  |==========================================================================================| 100%
subtiss <- FindVariableGenes(object = subtiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.8)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|

subtiss <- RunPCA(object = subtiss, pcs.compute = 20, weight.by.var = F)
[1] "PC1"
 [1] "Gsn"           "Fbln1"         "Pi16"          "Entpd2"        "Lbp"          
 [6] "Fxyd5"         "Crip2"         "Sparcl1"       "Plxdc2"        "Col14a1"      
[11] "Arap1"         "Asz1"          "Cd34"          "Efna5"         "Osr1"         
[16] "Fxyd6"         "Spon2"         "Actg1"         "Gm973"         "Ifi27l2a"     
[21] "Hsd11b1"       "Serpina3n"     "Inmt"          "Fmo1"          "C4b"          
[26] "1810041L15Rik" "Hspa1a"        "Cyp2e1"        "Ednrb"         "Akap12"       
[1] ""
 [1] "Myl9"          "Ptgs2"         "Plau"          "Myh11"         "Gatm"         
 [6] "Acta2"         "Pde4b"         "Trib1"         "Vcam1"         "Nampt"        
[11] "Pamr1"         "Prss35"        "Tagln"         "Procr"         "Mt1"          
[16] "Ldha"          "Ereg"          "Tnfsf9"        "Cish"          "Tnfaip3"      
[21] "Gpnmb"         "Niacr1"        "Ccnd2"         "Cebpd"         "Rab20"        
[26] "Rbp4"          "Sept4"         "1810011O10Rik" "Nfkbia"        "Iigp1"        
[1] ""
[1] ""
[1] "PC2"
 [1] "Tuba1c"    "Ifrd1"     "Sparcl1"   "Gfpt2"     "Ugdh"      "Scara5"    "Mat2a"    
 [8] "Metrnl"    "Nop58"     "Cish"      "Chodl"     "Gpr133"    "Pi16"      "Cebpd"    
[15] "Nr4a2"     "Nfkbia"    "Cd55"      "Myc"       "Hk2"       "Errfi1"    "Tnfrsf12a"
[22] "Gadd45b"   "Lbp"       "Uap1"      "Entpd2"    "Il6"       "Icam1"     "Col14a1"  
[29] "Bcl3"      "Tubb6"    
[1] ""
 [1] "Rbp4"     "Nprl2"    "U2af1l4"  "Ier2"     "Avpr1a"   "Tsc22d1"  "Zfyve21" 
 [8] "Tmem204"  "Zfp688"   "Rnf181"   "Cdk9"     "Fbxo31"   "Bub3"     "Rchy1"   
[15] "Tubg1"    "Cdk5rap1" "Crnkl1"   "Qrich1"   "Wdr8"     "Spin1"    "Glipr2"  
[22] "Ddx28"    "Sept4"    "Emilin1"  "Mum1"     "Ndp"      "Ypel3"    "Trim11"  
[29] "Smyd2"    "Rnf114"  
[1] ""
[1] ""
[1] "PC3"
 [1] "Irf2bp1"       "Ide"           "4921517L17Rik" "Ddx28"         "Fam53c"       
 [6] "Nudt13"        "Skiv2l2"       "Fads1"         "Usp21"         "Musk"         
[11] "H2-Aa"         "Cnot6"         "Neil1"         "Pknox1"        "E130308A19Rik"
[16] "Ddx17"         "Zfp949"        "Rpap3"         "Dus2l"         "Zfp523"       
[21] "Gss"           "Gabpb1"        "Wdr53"         "Gtf2h2"        "Irf9"         
[26] "Haus4"         "Cenpl"         "Qtrt1"         "Mxi1"          "Mum1"         
[1] ""
 [1] "Tlk2"     "Ptk7"     "Cdk5rap1" "Qrich1"   "Rilpl1"   "Yars2"    "Crnkl1"  
 [8] "Rfxank"   "Prep"     "Fbxo11"   "Gprasp1"  "Nkd2"     "Fmo5"     "Prpf3"   
[15] "Fbxo31"   "Tmem41a"  "Nprl2"    "Dom3z"    "Abcg1"    "Pld2"     "Zfp688"  
[22] "Pgm5"     "Parp3"    "Eml3"     "Med4"     "Ecm2"     "Pkdcc"    "Dcxr"    
[29] "Cstb"     "Dgcr6"   
[1] ""
[1] ""
[1] "PC4"
 [1] "Gna11"         "Blvrb"         "1810063B07Rik" "A430005L14Rik" "Atf3"         
 [6] "Pdrg1"         "Ier2"          "Tmem222"       "9130023H24Rik" "Tor2a"        
[11] "Rchy1"         "Bambi"         "Arl4d"         "Paqr5"         "Bub3"         
[16] "Aamp"          "Ahrr"          "Tsc22d1"       "9430020K01Rik" "Ranbp3"       
[21] "Anapc10"       "Gmpr2"         "Mrpl2"         "Ypel3"         "Bmp3"         
[26] "Sumf2"         "Txndc16"       "Atpaf2"        "Rtkn"          "Mlycd"        
[1] ""
 [1] "Arhgap21"      "Nacc2"         "Cdk5rap1"      "Rfxank"        "Crnkl1"       
 [6] "Ptk7"          "Arfgap2"       "Mcmbp"         "Rilpl1"        "Rbmx"         
[11] "Prep"          "Ppil4"         "Pcdhgc3"       "Tlk2"          "Map2k3"       
[16] "Cnot6"         "Nit2"          "Neil1"         "Pcsk5"         "Fmo5"         
[21] "Gprasp1"       "H2-Aa"         "Eml3"          "Fads1"         "Prpf3"        
[26] "4921517L17Rik" "Lman2l"        "Hyal2"         "Nkd2"          "Qrich1"       
[1] ""
[1] ""
[1] "PC5"
 [1] "Calcrl"        "Dnaja1"        "Ppp1r15a"      "Spin1"         "Plat"         
 [6] "Ece1"          "Gsn"           "Rbp4"          "Lmna"          "Sdc4"         
[11] "Ptn"           "Smad3"         "Tspan8"        "Cd14"          "Cd1d1"        
[16] "Gadd45b"       "Tcp11l2"       "Naaa"          "Cxcl12"        "Hspa1a"       
[21] "2010011I20Rik" "Uap1"          "Nfkbia"        "Fmo2"          "Fbln5"        
[26] "Mpv17"         "Arl8b"         "Rabl3"         "Hbegf"         "2010002N04Rik"
[1] ""
 [1] "Itih5"         "Myl9"          "Npy1r"         "Mfap5"         "Acta2"        
 [6] "Igfbp4"        "Nhsl2"         "Actg2"         "Prss35"        "Nsg1"         
[11] "Glul"          "Col8a1"        "Mtch2"         "Sqrdl"         "Serpina3n"    
[16] "Mgp"           "Mcm7"          "Lifr"          "Tspan4"        "Zfp259"       
[21] "Top2a"         "Slc9a3r2"      "Arhgdib"       "Rpap3"         "Fnta"         
[26] "Pomt2"         "8430410A17Rik" "Mki67ip"       "Acy1"          "Ddx39"        
[1] ""
[1] ""
subtiss <- ProjectPCA(object = subtiss, do.print = FALSE)
# If this fails for your subset, it may be that cells.use is more cells than you have left! Try reducing it.
PCHeatmap(object = subtiss, pc.use = 1:3, cells.use = 250, do.balanced = TRUE, label.columns = FALSE, num.genes = 12)

PCElbowPlot(object = subtiss)

# Set number of principal components. 
sub.n.pcs = 5
# Set resolution 
sub.res.used <- 1
subtiss <- FindClusters(object = subtiss, reduction.type = "pca", dims.use = 1:sub.n.pcs, 
    resolution = sub.res.used, ,print.output = 0, save.SNN = TRUE)
# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
subtiss <- RunTSNE(object = subtiss, dims.use = 1:sub.n.pcs, seed.use = 10, perplexity=20)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = subtiss, do.label = T)

TSNEPlot(object = subtiss, do.return = TRUE, group.by = "mouse.sex")

genes_to_check = c('Hhip','Dcn', 'Gli1','Gli2', 'Smo','Col1a1','Col8a1')
#genes_to_check = c('Alb', 'Cyp2f2', 'Cyp2e1', 'Hamp')
FeaturePlot(subtiss, genes_to_check, pt.size = 1, nCol = 3)

VlnPlot(subtiss, genes_to_check)

clust.markers <- FindMarkers(object = subtiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02s          
   |++                                                | 3 % ~02s          
   |++                                                | 4 % ~01s          
   |+++                                               | 5 % ~01s          
   |++++                                              | 6 % ~01s          
   |++++                                              | 8 % ~01s          
   |+++++                                             | 9 % ~01s          
   |++++++                                            | 10% ~01s          
   |++++++                                            | 11% ~01s          
   |+++++++                                           | 13% ~01s          
   |+++++++                                           | 14% ~01s          
   |++++++++                                          | 15% ~01s          
   |+++++++++                                         | 16% ~01s          
   |+++++++++                                         | 18% ~01s          
   |++++++++++                                        | 19% ~01s          
   |+++++++++++                                       | 20% ~01s          
   |+++++++++++                                       | 22% ~01s          
   |++++++++++++                                      | 23% ~01s          
   |+++++++++++++                                     | 24% ~01s          
   |+++++++++++++                                     | 25% ~01s          
   |++++++++++++++                                    | 27% ~01s          
   |++++++++++++++                                    | 28% ~01s          
   |+++++++++++++++                                   | 29% ~01s          
   |++++++++++++++++                                  | 30% ~01s          
   |++++++++++++++++                                  | 32% ~01s          
   |+++++++++++++++++                                 | 33% ~01s          
   |++++++++++++++++++                                | 34% ~01s          
   |++++++++++++++++++                                | 35% ~01s          
   |+++++++++++++++++++                               | 37% ~01s          
   |+++++++++++++++++++                               | 38% ~01s          
   |++++++++++++++++++++                              | 39% ~01s          
   |+++++++++++++++++++++                             | 41% ~01s          
   |+++++++++++++++++++++                             | 42% ~01s          
   |++++++++++++++++++++++                            | 43% ~01s          
   |+++++++++++++++++++++++                           | 44% ~01s          
   |+++++++++++++++++++++++                           | 46% ~01s          
   |++++++++++++++++++++++++                          | 47% ~01s          
   |+++++++++++++++++++++++++                         | 48% ~01s          
   |+++++++++++++++++++++++++                         | 49% ~01s          
   |++++++++++++++++++++++++++                        | 51% ~01s          
   |++++++++++++++++++++++++++                        | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 53% ~01s          
   |++++++++++++++++++++++++++++                      | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 57% ~01s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~00s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~00s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02s
clust.markers 
clust.markersuro <- FindMarkers(object = subtiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01s          
   |++                                                | 3 % ~01s          
   |++                                                | 4 % ~01s          
   |+++                                               | 5 % ~01s          
   |++++                                              | 6 % ~01s          
   |++++                                              | 8 % ~01s          
   |+++++                                             | 9 % ~01s          
   |++++++                                            | 10% ~01s          
   |++++++                                            | 11% ~01s          
   |+++++++                                           | 13% ~01s          
   |+++++++                                           | 14% ~01s          
   |++++++++                                          | 15% ~01s          
   |+++++++++                                         | 16% ~01s          
   |+++++++++                                         | 18% ~01s          
   |++++++++++                                        | 19% ~01s          
   |+++++++++++                                       | 20% ~01s          
   |+++++++++++                                       | 22% ~01s          
   |++++++++++++                                      | 23% ~01s          
   |+++++++++++++                                     | 24% ~01s          
   |+++++++++++++                                     | 25% ~01s          
   |++++++++++++++                                    | 27% ~01s          
   |++++++++++++++                                    | 28% ~01s          
   |+++++++++++++++                                   | 29% ~01s          
   |++++++++++++++++                                  | 30% ~01s          
   |++++++++++++++++                                  | 32% ~01s          
   |+++++++++++++++++                                 | 33% ~01s          
   |++++++++++++++++++                                | 34% ~01s          
   |++++++++++++++++++                                | 35% ~01s          
   |+++++++++++++++++++                               | 37% ~01s          
   |+++++++++++++++++++                               | 38% ~01s          
   |++++++++++++++++++++                              | 39% ~01s          
   |+++++++++++++++++++++                             | 41% ~01s          
   |+++++++++++++++++++++                             | 42% ~01s          
   |++++++++++++++++++++++                            | 43% ~01s          
   |+++++++++++++++++++++++                           | 44% ~01s          
   |+++++++++++++++++++++++                           | 46% ~01s          
   |++++++++++++++++++++++++                          | 47% ~01s          
   |+++++++++++++++++++++++++                         | 48% ~01s          
   |+++++++++++++++++++++++++                         | 49% ~01s          
   |++++++++++++++++++++++++++                        | 51% ~01s          
   |++++++++++++++++++++++++++                        | 52% ~01s          
   |+++++++++++++++++++++++++++                       | 53% ~01s          
   |++++++++++++++++++++++++++++                      | 54% ~01s          
   |++++++++++++++++++++++++++++                      | 56% ~01s          
   |+++++++++++++++++++++++++++++                     | 57% ~01s          
   |++++++++++++++++++++++++++++++                    | 58% ~01s          
   |++++++++++++++++++++++++++++++                    | 59% ~01s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~00s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~00s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02s
clust.markersuro
GenePlot(subtiss, 'Upk3a', 'Krt14', use.raw = T)
the standard deviation is zero

BuildClusterTree(subtiss)
[1] "Finished averaging RNA for cluster 0"
[1] "Finished averaging RNA for cluster 1"
[1] "Finished averaging RNA for cluster 2"
[1] "Finished averaging RNA for cluster 3"
An object of class seurat in project Bladder 
 16192 genes across 170 samples.

VlnPlot(subtiss, genes_to_check)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

Check expression of genes of interset.

genes_to_check = c('Btg2','Sgk1','Jun','Srsf2')
FeaturePlot(subtiss, genes_to_check, pt.size = 1)

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

# To change the y-axis to show raw counts, add use.raw = T.
DotPlot(subtiss, genes_to_check, plot.legend = T)

How big are the clusters?

table(subtiss@ident)

 0  1  2  3 
57 48 43 22 

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = subtiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(subtiss@ident), as.character(subtiss@meta.data$plate.barcode))
   
    B000610 B002764 B002771 D041914 D042253 MAA000487
  0      15       0       5      35       1         1
  1       3       1       0      42       1         1
  2      38       0       5       0       0         0
  3       2       0       0      20       0         0

Export the final metadata

So that Biohub can easily combine all your annotations, please export them as a simple csv.

filename = here('00_data_ingest', 'tissue_annotation_csv', 
                     paste0(tissue_of_interest, "_annotation.csv"))
write.csv(tiss@meta.data[,c('plate.barcode','annotation','cell_ontology_id')], file=filename)
LS0tCnRpdGxlOiAiQmxhZGRlciBGQUNTIE5vdGVib29rIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgpFbnRlciB0aGUgZGlyZWN0b3J5IG9mIHRoZSBtYWNhIGZvbGRlciBvbiB5b3VyIGRyaXZlIGFuZCB0aGUgbmFtZSBvZiB0aGUgdGlzc3VlIHlvdSB3YW50IHRvIGFuYWx5emUuCgpgYGB7cn0KdGlzc3VlX29mX2ludGVyZXN0ID0gIkJsYWRkZXIiCmBgYAoKTG9hZCB0aGUgcmVxdWlzaXRlIHBhY2thZ2VzIGFuZCBzb21lIGFkZGl0aW9uYWwgaGVscGVyIGZ1bmN0aW9ucy4KCmBgYHtyfQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodXNlZnVsKQpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShkcGx5cikKbGlicmFyeShNYXRyaXgpCgpzYXZlX2RpciA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJ3Rpc3N1ZV9yb2JqJykKYGBgCgoKCmBgYHtyfQojIHJlYWQgdGhlIG1ldGFkYXRhIHRvIGdldCB0aGUgcGxhdGVzIHdlIHdhbnQKcGxhdGVfbWV0YWRhdGFfZmlsZW5hbWUgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICdmYWNzX3Jhd19kYXRhJywgJ21ldGFkYXRhX0ZBQ1MuY3N2JykKCnBsYXRlX21ldGFkYXRhIDwtIHJlYWQuY3N2KHBsYXRlX21ldGFkYXRhX2ZpbGVuYW1lLCBzZXA9IiwiLCBoZWFkZXIgPSBUUlVFKQpjb2xuYW1lcyhwbGF0ZV9tZXRhZGF0YSlbMV0gPC0gInBsYXRlLmJhcmNvZGUiCnBsYXRlX21ldGFkYXRhCmBgYAoKTG9hZCB0aGUgcGxhdGUgZGF0YS4gIkJsYWRkZXIiIGlzIG9uZSBvZiB0aGUgdGlzc3VlcyBzdHVkaWVkCgpgYGB7cn0KdGlzc3VlX3BsYXRlcyA9IGZpbHRlcihwbGF0ZV9tZXRhZGF0YSwgdGlzc3VlID09IHRpc3N1ZV9vZl9pbnRlcmVzdClbLGMoJ3BsYXRlLmJhcmNvZGUnLCd0aXNzdWUnLCdzdWJ0aXNzdWUnLCdtb3VzZS5zZXgnKV0KdGlzc3VlX3BsYXRlcwpgYGAKCkxvYWQgdGhlIHJlYWQgY291bnQgZGF0YS4KYGBge3J9CiNMb2FkIHRoZSBnZW5lIG5hbWVzIGFuZCBzZXQgdGhlIG1ldGFkYXRhIGNvbHVtbnMgYnkgb3BlbmluZyB0aGUgZmlyc3QgZmlsZQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJ2ZhY3NfcmF3X2RhdGEnLCAnRkFDUycsIHBhc3RlMCh0aXNzdWVfb2ZfaW50ZXJlc3QsICctY291bnRzLmNzdicpKQoKcmF3LmRhdGEgPSByZWFkLmNzdihmaWxlbmFtZSwgc2VwPSIsIiwgcm93Lm5hbWVzPTEpCiMgcmF3LmRhdGEgPSBkYXRhLmZyYW1lKHJvdy5uYW1lcyA9IHJvd25hbWVzKHJhdy5kYXRhKSkKY29ybmVyKHJhdy5kYXRhKQpgYGAKTWFrZSBhIHZlY3RvciBvZiBwbGF0ZSBiYXJjb2RlcyBmb3IgZWFjaCBjZWxsCgpgYGB7cn0KcGxhdGUuYmFyY29kZXMgPSBsYXBwbHkoY29sbmFtZXMocmF3LmRhdGEpLCBmdW5jdGlvbih4KSBzdHJzcGxpdChzdHJzcGxpdCh4LCAiXyIpW1sxXV1bMV0sICcuJywgZml4ZWQ9VFJVRSlbWzFdXVsyXSkKaGVhZChwbGF0ZS5iYXJjb2RlcykKYGBgCgpVc2Ugb25seSB0aGUgbWV0YWRhdGEgcm93cyBjb3JyZXNwb25kaW5nIHRvIEJsYWRkZXIgcGxhdGVzLiBNYWtlIGEgcGxhdGUgYmFyY29kZSBkYXRhZnJhbWUgdG8gImV4cGFuZCIgdGhlIHBlci1wbGF0ZSBtZXRhZGF0YSB0byBiZSBwZXItY2VsbC4KYGBge3J9CmJhcmNvZGUuZGYgPSB0LmRhdGEuZnJhbWUoYXMuZGF0YS5mcmFtZShwbGF0ZS5iYXJjb2RlcykpCgpyb3duYW1lcyhiYXJjb2RlLmRmKSA9IGNvbG5hbWVzKHJhdy5kYXRhKQpjb2xuYW1lcyhiYXJjb2RlLmRmKSA9IGMoJ3BsYXRlLmJhcmNvZGUnKQpoZWFkKGJhcmNvZGUuZGYpCgpybmFtZXMgPSByb3cubmFtZXMoYmFyY29kZS5kZikKbWV0YS5kYXRhIDwtIG1lcmdlKGJhcmNvZGUuZGYsIHBsYXRlX21ldGFkYXRhLCBieT0ncGxhdGUuYmFyY29kZScsIHNvcnQgPSBGKQpyb3cubmFtZXMobWV0YS5kYXRhKSA8LSBybmFtZXMKaGVhZChtZXRhLmRhdGEpCmBgYAoKUHJvY2VzcyB0aGUgcmF3IGRhdGEgYW5kIGxvYWQgaXQgaW50byB0aGUgU2V1cmF0IG9iamVjdC4KCmBgYHtyfQojIEZpbmQgRVJDQydzLCBjb21wdXRlIHRoZSBwZXJjZW50IEVSQ0MsIGFuZCBkcm9wIHRoZW0gZnJvbSB0aGUgcmF3IGRhdGEuCmVyY2NzIDwtIGdyZXAocGF0dGVybiA9ICJeRVJDQy0iLCB4ID0gcm93bmFtZXMoeCA9IHJhdy5kYXRhKSwgdmFsdWUgPSBUUlVFKQpwZXJjZW50LmVyY2MgPC0gTWF0cml4Ojpjb2xTdW1zKHJhdy5kYXRhW2VyY2NzLCBdKS9NYXRyaXg6OmNvbFN1bXMocmF3LmRhdGEpCmVyY2MuaW5kZXggPC0gZ3JlcChwYXR0ZXJuID0gIl5FUkNDLSIsIHggPSByb3duYW1lcyh4ID0gcmF3LmRhdGEpLCB2YWx1ZSA9IEZBTFNFKQpyYXcuZGF0YSA8LSByYXcuZGF0YVstZXJjYy5pbmRleCxdCgojIENyZWF0ZSB0aGUgU2V1cmF0IG9iamVjdCB3aXRoIGFsbCB0aGUgZGF0YQp0aXNzIDwtIENyZWF0ZVNldXJhdE9iamVjdChyYXcuZGF0YSA9IHJhdy5kYXRhLCBwcm9qZWN0ID0gdGlzc3VlX29mX2ludGVyZXN0LCAKICAgICAgICAgICAgICAgICAgICBtaW4uY2VsbHMgPSA1LCBtaW4uZ2VuZXMgPSA1KQoKdGlzcyA8LSBBZGRNZXRhRGF0YShvYmplY3QgPSB0aXNzLCBtZXRhLmRhdGEpCnRpc3MgPC0gQWRkTWV0YURhdGEob2JqZWN0ID0gdGlzcywgcGVyY2VudC5lcmNjLCBjb2wubmFtZSA9ICJwZXJjZW50LmVyY2MiKQojIENoYW5nZSBkZWZhdWx0IG5hbWUgZm9yIHN1bXMgb2YgY291bnRzIGZyb20gblVNSSB0byBuUmVhZHMKY29sbmFtZXModGlzc0BtZXRhLmRhdGEpW2NvbG5hbWVzKHRpc3NAbWV0YS5kYXRhKSA9PSAnblVNSSddIDwtICduUmVhZHMnCgojIENyZWF0ZSBtZXRhZGF0YSBjb2x1bW5zIGZvciBhbm5vdGF0aW9ucyBhbmQgc3ViYW5ub3RhdGlvbnMKdGlzc0BtZXRhLmRhdGFbLCdhbm5vdGF0aW9uJ10gPC0gTkEKdGlzc0BtZXRhLmRhdGFbLCdzdWJhbm5vdGF0aW9uJ10gPC0gTkEKYGBgCgoKQ2FsY3VsYXRlIHBlcmNlbnQgcmlib3NvbWFsIGdlbmVzLgoKYGBge3J9CnJpYm8uZ2VuZXMgPC0gZ3JlcChwYXR0ZXJuID0gIl5ScFtzbF1bWzpkaWdpdDpdXSIsIHggPSByb3duYW1lcyh4ID0gdGlzc0BkYXRhKSwgdmFsdWUgPSBUUlVFKQpwZXJjZW50LnJpYm8gPC0gTWF0cml4Ojpjb2xTdW1zKHRpc3NAcmF3LmRhdGFbcmliby5nZW5lcywgXSkvTWF0cml4Ojpjb2xTdW1zKHRpc3NAcmF3LmRhdGEpCnRpc3MgPC0gQWRkTWV0YURhdGEob2JqZWN0ID0gdGlzcywgbWV0YWRhdGEgPSBwZXJjZW50LnJpYm8sIGNvbC5uYW1lID0gInBlcmNlbnQucmlibyIpCmBgYAoKQSBzYW5pdHkgY2hlY2s6IGdlbmVzIHBlciBjZWxsIHZzIHJlYWRzIHBlciBjZWxsLgoKYGBge3J9CkdlbmVQbG90KG9iamVjdCA9IHRpc3MsIGdlbmUxID0gIm5SZWFkcyIsIGdlbmUyID0gIm5HZW5lIiwgdXNlLnJhdz1UKQpgYGAKCkZpbHRlciBvdXQgY2VsbHMgd2l0aCBmZXcgcmVhZHMgYW5kIGZldyBnZW5lcy4KCmBgYHtyfQp0aXNzIDwtIEZpbHRlckNlbGxzKG9iamVjdCA9IHRpc3MsIHN1YnNldC5uYW1lcyA9IGMoIm5HZW5lIiwgIm5SZWFkcyIpLCAKICAgIGxvdy50aHJlc2hvbGRzID0gYyg1MDAsIDUwMDAwKSwgaGlnaC50aHJlc2hvbGRzID0gYygyNTAwMCwgMjAwMDAwMCkpCmBgYAoKCk5vcm1hbGl6ZSB0aGUgZGF0YSwgdGhlbiByZWdyZXNzIG91dCBjb3JyZWxhdGlvbiB3aXRoIHRvdGFsIHJlYWRzCmBgYHtyfQp0aXNzIDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gdGlzcykKdGlzcyA8LSBTY2FsZURhdGEob2JqZWN0ID0gdGlzcywgdmFycy50by5yZWdyZXNzID0gYygiblJlYWRzIiwgInBlcmNlbnQucmlibyIsIlJuNDVzIikpCnRpc3MgPC0gRmluZFZhcmlhYmxlR2VuZXMob2JqZWN0ID0gdGlzcywgZG8ucGxvdCA9IFRSVUUsIHguaGlnaC5jdXRvZmYgPSBJbmYsIHkuY3V0b2ZmID0gMC41KQpgYGAKCgpSdW4gUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcy4KYGBge3J9CnRpc3MgPC0gUnVuUENBKG9iamVjdCA9IHRpc3MsIGRvLnByaW50ID0gRkFMU0UpCnRpc3MgPC0gUHJvamVjdFBDQShvYmplY3QgPSB0aXNzLCBkby5wcmludCA9IEZBTFNFKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQpQQ0hlYXRtYXAob2JqZWN0ID0gdGlzcywgcGMudXNlID0gMTozLCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1ucyA9IEZBTFNFLCBudW0uZ2VuZXMgPSA4KQpgYGAKCkxhdGVyIG9uIChpbiBGaW5kQ2x1c3RlcnMgYW5kIFRTTkUpIHlvdSB3aWxsIHBpY2sgYSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGtlZXBpbmcgdGhlIG1ham9yIGRpcmVjdGlvbnMgb2YgdmFyaWF0aW9uIGluIHRoZSBkYXRhIGFuZCwgaWRlYWxseSwgc3VwcmVzc2luZyBub2lzZS4gVGhlcmUgaXMgbm8gY29ycmVjdCBhbnN3ZXIgdG8gdGhlIG51bWJlciB0byB1c2UsIGJ1dCBhIGRlY2VudCBydWxlIG9mIHRodW1iIGlzIHRvIGdvIHVudGlsIHRoZSBwbG90IHBsYXRlYXVzLgoKYGBge3J9ClBDRWxib3dQbG90KG9iamVjdCA9IHRpc3MpCmBgYAoKQ2hvb3NlIHRoZSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLgpgYGB7cn0KIyBTZXQgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzLiAKbi5wY3MgPSAxMApgYGAKCgpUaGUgY2x1c3RlcmluZyBpcyBwZXJmb3JtZWQgYmFzZWQgb24gYSBuZWFyZXN0IG5laWdoYm9ycyBncmFwaC4gQ2VsbHMgdGhhdCBoYXZlIHNpbWlsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGpvaW5lZCB0b2dldGhlci4gVGhlIExvdXZhaW4gYWxnb3JpdGhtIGxvb2tzIGZvciBncm91cHMgb2YgY2VsbHMgd2l0aCBoaWdoIG1vZHVsYXJpdHktLW1vcmUgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBncm91cCB0aGFuIGJldHdlZW4gZ3JvdXBzLiBUaGUgcmVzb2x1dGlvbiBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2NhbGUuLi5oaWdoZXIgcmVzb2x1dGlvbiB3aWxsIGdpdmUgbW9yZSBjbHVzdGVycywgbG93ZXIgcmVzb2x1dGlvbiB3aWxsIGdpdmUgZmV3ZXIuCgpGb3IgdGhlIHRvcC1sZXZlbCBjbHVzdGVyaW5nLCBhaW0gdG8gdW5kZXItY2x1c3RlciBpbnN0ZWFkIG9mIG92ZXItY2x1c3Rlci4gSXQgd2lsbCBiZSBlYXN5IHRvIHN1YnNldCBncm91cHMgYW5kIGZ1cnRoZXIgYW5hbHl6ZSB0aGVtIGJlbG93LgoKYGBge3J9CiMgU2V0IHJlc29sdXRpb24gCnJlcy51c2VkIDwtIDEKCnRpc3MgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHRpc3MsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpuLnBjcywgCiAgICByZXNvbHV0aW9uID0gcmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4KdGlzcyA8LSBSdW5UU05FKG9iamVjdCA9IHRpc3MsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0zMCkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKCgpDaGVjayBleHByZXNzaW9uIG9mIGdlbmVzIG9mIGludGVyc2V0LgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD04fQpnZW5lc190b19jaGVjayA9IGMoJ0VwY2FtJywnVXBrMWInLCAnVXBrM2EnLCdHcmhsMycsICdLcnQ1JywgJ0tydDE0JywgJ0RjbicsICdDb2wxYTEnLCdDb2w4YTEnKQojZ2VuZXNfdG9fY2hlY2sgPSBjKCdBbGInLCAnQ3lwMmYyJywgJ0N5cDJlMScsICdIYW1wJykKCkZlYXR1cmVQbG90KHRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSwgbkNvbCA9IDMpCmBgYAoKRG90cGxvdHMgbGV0IHlvdSBzZWUgdGhlIGludGVuc2l0eSBvZiBleHBwcmVzc2lvbiBhbmQgdGhlIGZyYWN0aW9uIG9mIGNlbGxzIGV4cHJlc3NpbmcgZm9yIGVhY2ggb2YgeW91ciBnZW5lcyBvZiBpbnRlcmVzdC4KYGBge3J9ClZsblBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2spCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgVG8gY2hhbmdlIHRoZSB5LWF4aXMgdG8gc2hvdyByYXcgY291bnRzLCBhZGQgdXNlLnJhdyA9IFQuCkRvdFBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2ssIHBsb3QubGVnZW5kID0gVCkKYGBgCmBgYHtyfQpCdWlsZENsdXN0ZXJUcmVlKHRpc3MpCgpgYGAKCgpgYGB7cn0KIyBHZXQgbWFya2VycyBmb3IgYSBwYXJ0aWN1bGFyIGNsdXN0ZXIKY2x1c3RlcjBfbWFya2VycyA9IGZpbHRlcih0aXNzLm1hcmtlcnMsIGNsdXN0ZXIgPT0gMCkkZ2VuZQoKRG90UGxvdCh0aXNzLCBnZW5lcy5wbG90ID0gY2x1c3RlcjBfbWFya2Vyc1sxOjIwXSwgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCgoKSG93IGJpZyBhcmUgdGhlIGNsdXN0ZXJzPwpgYGB7cn0KdGFibGUodGlzc0BpZGVudCkKYGBgCgoKCldoaWNoIG1hcmtlcnMgaWRlbnRpZnkgYSBzcGVjaWZpYyBjbHVzdGVyPwoKYGBge3J9CmNsdXN0Lm1hcmtlcnMgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gdGlzcywgaWRlbnQuMSA9IDAsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKCmBgYHtyfQpwcmludCh4ID0gaGVhZCh4PSBjbHVzdC5tYXJrZXJzLCBuID0gMTApKQpgYGAKCllvdSBjYW4gYWxzbyBjb21wdXRlIGFsbCBtYXJrZXJzIGZvciBhbGwgY2x1c3RlcnMgYXQgb25jZS4gVGhpcyBtYXkgdGFrZSBzb21lIHRpbWUuCmBgYHtyfQojdGlzcy5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKG9iamVjdCA9IHRpc3MsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKYGBge3J9CnRpc3MubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhvYmplY3QgPSB0aXNzLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKYGBgCgpEaXNwbGF5IHRoZSB0b3AgbWFya2VycyB5b3UgY29tcHV0ZWQgYWJvdmUuCmBgYHtyfQojdGlzcy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24oNSwgYXZnX2RpZmYpCnRpc3MubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKDEwLCBhdmdfZGlmZikKYGBgCgojIyBBc3NpZ25pbmcgY2VsbCB0eXBlIGlkZW50aXR5IHRvIGNsdXN0ZXJzCgpBdCBhIGNvYXJzZSBsZXZlbCwgd2UgY2FuIHVzZSBjYW5vbmljYWwgbWFya2VycyB0byBtYXRjaCB0aGUgdW5iaWFzZWQgY2x1c3RlcmluZyB0byBrbm93biBjZWxsIHR5cGVzOgoKMDogYWxwaGEKMTogYmV0YQoyOiBiZXRhCjM6IGV4b2NyaW5lCjQ6IGR1Y3QKNTogZGVsdGEKNjogZ2FtbWEKNzogZW5kb3RoZWxpYWwKODogaW1tdW5lCjk6IHN0ZWxsYXRlCgpgYGB7cn0KIyBzdGFzaCBjdXJyZW50IGNsdXN0ZXIgSURzCnRpc3MgPC0gU3Rhc2hJZGVudChvYmplY3QgPSB0aXNzLCBzYXZlLm5hbWUgPSAiY2x1c3Rlci5pZHMiKQoKIyBlbnVtZXJhdGUgY3VycmVudCBjbHVzdGVyIElEcyBhbmQgdGhlIGxhYmVscyBmb3IgdGhlbQpjbHVzdGVyLmlkcyA8LSBjKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpCmFubm90YXRpb24gPC0gYygiYmxhZGRlciBjZWxsIiwgImJsYWRkZXIgY2VsbCIsICJtZXNlbmNoeW1hbCBjZWxsIiwgIm1lc2VuY2h5bWFsIGNlbGwiLCAibWVzZW5jaHltYWwgY2VsbCIsICJtZXNlbmNoeW1hbCBjZWxsIiwgImJhc2FsIGNlbGwgb2YgdXJvdGhlbGl1bSIsICJibGFkZGVyIGNlbGwiKQpjZWxsX29udG9sb2d5X2lkID0gYygiQ0w6MTAwMTMxOSIsICJDTDoxMDAxMzE5IiwgIkNMOjAwMDgwMTkiLCAiQ0w6MDAwODAxOSIsICJDTDowMDA4MDE5IiwgIkNMOjAwMDgwMTkiLCAiQ0w6MTAwMDQ4NiIsICJDTDoxMDAxMzE5IikKCnRpc3NAbWV0YS5kYXRhWywnYW5ub3RhdGlvbiddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BtZXRhLmRhdGEkY2x1c3Rlci5pZHMsIGZyb20gPSBjbHVzdGVyLmlkcywgdG8gPSBhbm5vdGF0aW9uKQp0aXNzQG1ldGEuZGF0YVssJ2NlbGxfb250b2xvZ3lfaWQnXSA8LSBwbHlyOjptYXB2YWx1ZXMoeCA9IHRpc3NAbWV0YS5kYXRhJGNsdXN0ZXIuaWRzLCBmcm9tID0gY2x1c3Rlci5pZHMsIHRvID0gY2VsbF9vbnRvbG9neV9pZCkKClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLmxhYmVsID0gVFJVRSwgcHQuc2l6ZSA9IDAuNSwgZ3JvdXAuYnk9J2Fubm90YXRpb24nKQpgYGAKCmBgYHtyfQpUU05FUGxvdChvYmplY3QgPSB0aXNzLCBkby5yZXR1cm4gPSBUUlVFLCBncm91cC5ieSA9ICJtb3VzZS5zZXgiKQoKYGBgCgpTYXZlIHRoZSBTZXVyYXQgb2JqZWN0CgpgYGB7cn0Kc2F2ZSh0aXNzLCBmaWxlPXBhc3RlMChzYXZlX2RpciwiLyIsdGlzc3VlX29mX2ludGVyZXN0LCAiX3NldXJhdF90aXNzLlJvYmoiKSkKYGBgCgpgYGB7cn0Kd3JpdGUuY3N2KHRpc3NAbWV0YS5kYXRhWyxjKCdhbm5vdGF0aW9uJywnY2VsbF9vbnRvbG9neV9pZCcpXSxmaWxlID1wYXN0ZTAoc2F2ZV9kaXIsIi8iLCB0aXNzdWVfb2ZfaW50ZXJlc3QsIl9tZXRhZGF0YS5jc3YiKSkKYGBgCgojIyBDaGVja2luZyBmb3IgYmF0Y2ggZWZmZWN0cwoKCkNvbG9yIGJ5IG1ldGFkYXRhLCBsaWtlIHBsYXRlIGJhcmNvZGUsIHRvIGNoZWNrIGZvciBiYXRjaCBlZmZlY3RzLgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpCmBgYAoKUHJpbnQgYSB0YWJsZSBzaG93aW5nIHRoZSBjb3VudCBvZiBjZWxscyBpbiBlYWNoIGlkZW50aXR5IGNhdGVnb3J5IGZyb20gZWFjaCBwbGF0ZS4KCmBgYHtyfQp0YWJsZShhcy5jaGFyYWN0ZXIodGlzc0BpZGVudCksIGFzLmNoYXJhY3Rlcih0aXNzQG1ldGEuZGF0YSRwbGF0ZS5iYXJjb2RlKSkKYGBgCgojIyMgU2F2ZSB0aGUgUiBvYmplY3Qgc28gMS4geW91IGNhbiByZWxvYWQgd2l0aG91dCByZWNvbXB1dGluZyBhbmQgMi4gYW55b25lIGVsc2UgY2FuIHJlcHJvZHVjZSB5b3VyIGZpZ3VyZXMuCgpgYGB7cn0Kc2F2ZSh0aXNzLCBmaWxlPXBhc3RlMChzYXZlX2RpciwiLyIsdGlzc3VlX29mX2ludGVyZXN0LCAiX3NldXJhdF90aXNzLlJvYmoiKSkKYGBgCgpgYGB7cn0KIyBUbyByZWxvYWQgYSBzYXZlZCBvYmplY3QKIyBsb2FkKGZpbGU9cGFzdGUwKHJvb3RkaXIsIi8iLHRpc3N1ZV9vZl9pbnRlcmVzdCwgIl9zZXVyYXRfdGlzcy5Sb2JqIikKYGBgCgoKYGBge3J9CiMgR2V0IG1hcmtlcnMgZm9yIGEgcGFydGljdWxhciBjbHVzdGVyCmZvciAoaSBpbiAwOjcpIHtjbHVzdGVybWFya2VycyA9IGZpbHRlcih0aXNzLm1hcmtlcnMsIGNsdXN0ZXIgPT0gaSkkZ2VuZQpEb3RQbG90KHRpc3MsIGdlbmVzLnBsb3QgPSBjbHVzdGVybWFya2Vyc1sxOjIwXSwgcGxvdC5sZWdlbmQgPSBUKX0KYGBgCgoKYGBge3J9CgojIEdldCBzdWJ0aXNzdWUsIGVnLCB0aGUgZW5kb2NyaW5lIGNsdXN0ZXJzCnN1YnRpc3MgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBpZGVudC51c2UgPSBjKDIpLAogIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRikKCmBgYAoKYGBge3J9CnN1YnRpc3MgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBpZGVudC51c2UgPSBjKDIpLCBkby5jZW50ZXIgPSBGLCBkby5zY2FsZSA9IEYsIGNlbGxzLnVzZSA9ICkKCmBgYAoKYGBge3J9CnN1YnRpc3MgPC0gTm9ybWFsaXplRGF0YShvYmplY3QgPSBzdWJ0aXNzKQpzdWJ0aXNzIDwtIFNjYWxlRGF0YShvYmplY3QgPSBzdWJ0aXNzLCB2YXJzLnRvLnJlZ3Jlc3MgPSBjKCJuUmVhZHMiLCAicGVyY2VudC5yaWJvIiwiUm40NXMiKSkKYGBgCgpgYGB7cn0Kc3VidGlzcyA8LSBGaW5kVmFyaWFibGVHZW5lcyhvYmplY3QgPSBzdWJ0aXNzLCBkby5wbG90ID0gVFJVRSwgeC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjgpCnN1YnRpc3MgPC0gUnVuUENBKG9iamVjdCA9IHN1YnRpc3MsIHBjcy5jb21wdXRlID0gMjAsIHdlaWdodC5ieS52YXIgPSBGKQpzdWJ0aXNzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc3VidGlzcywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgpgYGB7cn0KIyBJZiB0aGlzIGZhaWxzIGZvciB5b3VyIHN1YnNldCwgaXQgbWF5IGJlIHRoYXQgY2VsbHMudXNlIGlzIG1vcmUgY2VsbHMgdGhhbiB5b3UgaGF2ZSBsZWZ0ISBUcnkgcmVkdWNpbmcgaXQuClBDSGVhdG1hcChvYmplY3QgPSBzdWJ0aXNzLCBwYy51c2UgPSAxOjMsIGNlbGxzLnVzZSA9IDI1MCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW5zID0gRkFMU0UsIG51bS5nZW5lcyA9IDEyKQpgYGAKCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSBzdWJ0aXNzKQpgYGAKCmBgYHtyfQojIFNldCBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMuIApzdWIubi5wY3MgPSA1CmBgYAoKYGBge3J9CiMgU2V0IHJlc29sdXRpb24gCnN1Yi5yZXMudXNlZCA8LSAxCgpzdWJ0aXNzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSBzdWJ0aXNzLCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6c3ViLm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSBzdWIucmVzLnVzZWQsICxwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYAoKYGBge3J9CiMgSWYgY2VsbHMgYXJlIHRvbyBzcHJlYWQgb3V0LCB5b3UgY2FuIHJhaXNlIHRoZSBwZXJwbGV4aXR5LiBJZiB5b3UgaGF2ZSBmZXcgY2VsbHMsIHRyeSBhIGxvd2VyIHBlcnBsZXhpdHkgKGJ1dCBuZXZlciBsZXNzIHRoYW4gMTApLgpzdWJ0aXNzIDwtIFJ1blRTTkUob2JqZWN0ID0gc3VidGlzcywgZGltcy51c2UgPSAxOnN1Yi5uLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT0yMCkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gc3VidGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3MsIGRvLnJldHVybiA9IFRSVUUsIGdyb3VwLmJ5ID0gIm1vdXNlLnNleCIpCmBgYAoKYGBge3J9CmdlbmVzX3RvX2NoZWNrID0gYygnSGhpcCcsJ0RjbicsICdHbGkxJywnR2xpMicsICdTbW8nLCdDb2wxYTEnLCdDb2w4YTEnKQojZ2VuZXNfdG9fY2hlY2sgPSBjKCdBbGInLCAnQ3lwMmYyJywgJ0N5cDJlMScsICdIYW1wJykKCkZlYXR1cmVQbG90KHN1YnRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSwgbkNvbCA9IDMpCmBgYAoKYGBge3J9ClZsblBsb3Qoc3VidGlzcywgZ2VuZXNfdG9fY2hlY2spCmBgYAoKYGBge3J9CmNsdXN0Lm1hcmtlcnMgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gc3VidGlzcywgaWRlbnQuMSA9IDAsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpjbHVzdC5tYXJrZXJzIApgYGAKCmBgYHtyfQpjbHVzdC5tYXJrZXJzdXJvIDwtIEZpbmRNYXJrZXJzKG9iamVjdCA9IHN1YnRpc3MsIGlkZW50LjEgPSAwLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKY2x1c3QubWFya2Vyc3VybwpgYGAKCgpgYGB7cn0KR2VuZVBsb3Qoc3VidGlzcywgJ1VwazNhJywgJ0tydDE0JywgdXNlLnJhdyA9IFQpCmBgYAoKYGBge3J9CkJ1aWxkQ2x1c3RlclRyZWUoc3VidGlzcykKYGBgCgpgYGB7cn0KVmxuUGxvdChzdWJ0aXNzLCBnZW5lc190b19jaGVjaykKYGBgCgpMYXRlciBvbiAoaW4gRmluZENsdXN0ZXJzIGFuZCBUU05FKSB5b3Ugd2lsbCBwaWNrIGEgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZSBtYWpvciBkaXJlY3Rpb25zIG9mIHZhcmlhdGlvbiBpbiB0aGUgZGF0YSBhbmQsIGlkZWFsbHksIHN1cHJlc3Npbmcgbm9pc2UuIFRoZXJlIGlzIG5vIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBudW1iZXIgdG8gdXNlLCBidXQgYSBkZWNlbnQgcnVsZSBvZiB0aHVtYiBpcyB0byBnbyB1bnRpbCB0aGUgcGxvdCBwbGF0ZWF1cy4KCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCgpgYGB7cn0KZ2VuZXNfdG9fY2hlY2sgPSBjKCdCdGcyJywnU2drMScsJ0p1bicsJ1Nyc2YyJykKCkZlYXR1cmVQbG90KHN1YnRpc3MsIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSkKYGBgCgpEb3RwbG90cyBsZXQgeW91IHNlZSB0aGUgaW50ZW5zaXR5IG9mIGV4cHByZXNzaW9uIGFuZCB0aGUgZnJhY3Rpb24gb2YgY2VsbHMgZXhwcmVzc2luZyBmb3IgZWFjaCBvZiB5b3VyIGdlbmVzIG9mIGludGVyZXN0LgoKYGBge3J9CiMgVG8gY2hhbmdlIHRoZSB5LWF4aXMgdG8gc2hvdyByYXcgY291bnRzLCBhZGQgdXNlLnJhdyA9IFQuCkRvdFBsb3Qoc3VidGlzcywgZ2VuZXNfdG9fY2hlY2ssIHBsb3QubGVnZW5kID0gVCkKYGBgCgpIb3cgYmlnIGFyZSB0aGUgY2x1c3RlcnM/CmBgYHtyfQp0YWJsZShzdWJ0aXNzQGlkZW50KQpgYGAKCiMjIENoZWNraW5nIGZvciBiYXRjaCBlZmZlY3RzCgpDb2xvciBieSBtZXRhZGF0YSwgbGlrZSBwbGF0ZSBiYXJjb2RlLCB0byBjaGVjayBmb3IgYmF0Y2ggZWZmZWN0cy4KYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3MsIGRvLnJldHVybiA9IFRSVUUsIGdyb3VwLmJ5ID0gInBsYXRlLmJhcmNvZGUiKQpgYGAKClByaW50IGEgdGFibGUgc2hvd2luZyB0aGUgY291bnQgb2YgY2VsbHMgaW4gZWFjaCBpZGVudGl0eSBjYXRlZ29yeSBmcm9tIGVhY2ggcGxhdGUuCgpgYGB7cn0KdGFibGUoYXMuY2hhcmFjdGVyKHN1YnRpc3NAaWRlbnQpLCBhcy5jaGFyYWN0ZXIoc3VidGlzc0BtZXRhLmRhdGEkcGxhdGUuYmFyY29kZSkpCmBgYAoKCgojIEV4cG9ydCB0aGUgZmluYWwgbWV0YWRhdGEKClNvIHRoYXQgQmlvaHViIGNhbiBlYXNpbHkgY29tYmluZSBhbGwgeW91ciBhbm5vdGF0aW9ucywgcGxlYXNlIGV4cG9ydCB0aGVtIGFzIGEgc2ltcGxlIGNzdi4KCmBgYHtyfQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJ3Rpc3N1ZV9hbm5vdGF0aW9uX2NzdicsIAogICAgICAgICAgICAgICAgICAgICBwYXN0ZTAodGlzc3VlX29mX2ludGVyZXN0LCAiX2Fubm90YXRpb24uY3N2IikpCndyaXRlLmNzdih0aXNzQG1ldGEuZGF0YVssYygncGxhdGUuYmFyY29kZScsJ2Fubm90YXRpb24nLCdjZWxsX29udG9sb2d5X2lkJyldLCBmaWxlPWZpbGVuYW1lKQpgYGAKCgoK